nosql 由客户端分离数据

nosql separate data by client

我必须使用 NoSql 基础(couchbase 或 cassandra)开发一个项目。 我想知道是否建议将每个客户的数据分区在一个桶中?

在我的例子中,不同客户端之间永远不会有请求。 数据可以完全分离。

对于couchbase,我看到为每个桶预留了一个内存容量。

对于cassandra,在另一个地方文件或超级列中必须在哪里进行分离。

谢谢

Where does the separation have to be done at another place document or super column for cassandra.

提示 #1,在使用 Cassandra 时,从您的词汇表中完全删除 单词 "super column"。

I would like to know if it is recommended to partition the data of each customer in a bucket?

这取决于。听起来您的查询主要基于客户 ID,因此将其作为分区键的 部分 是有意义的。但是,如果每个客户分区下面有数百万行 and/or 列,那将会变得非常大。

提示 #2,正确的 Cassandra 建模是根据您所需的查询进行的。因此,在没有真正看到您需要服务的查询类型的情况下,很难比这更具体。

如果您有与帐户和地址等相关的客户数据,那么使用仅 customer_id 的主键构建 customers table 可能有意义。但是,如果您发现需要通过 email_address 查询您的客户(例如),那么您需要创建一个 customers_by_email table,将您的数据复制到其中,然后创建一个支持那个的主键。

此外,如果您发现自己在客户 activity 上存储数据,您可能需要考虑 customer_activity table,主键为 PRIMARY KEY ((customer_id,month),activity_time)。这将同时使用 customer_idmonth 作为分区键,存储由 activity_time 聚类的客户 activity。在这种情况下,如果我们不使用 month 作为附加分区键,每个 customer_id 分区将被不断写入,直到它变得难以写入或查询(未绑定的行增长)。

总结:

  • 如果有人告诉你在 Cassandra 中使用超级列,打他们
  • 在设计 table 之前,您需要了解自己的查询。
  • 是的,customer_id 是保持数据独立并确保每个查询仅限于单个节点的好方法。 - 构建您的分区键以解决未绑定的行增长问题,从而避免将太多数据写入同一分区。