我必须使用NoSql base(couchbase或cassandra)开发一个项目。 我想知道是否建议将每个客户的数据划分为一个桶?
就我而言,不同客户之间永远不会有请求。 数据可以完全分开。
对于couchbase,我看到每个桶的内存容量都是为他保留的。
在哪里进行分离必须在另一个地方文件或超级列中进行cassandra。
谢谢
答案 0 :(得分:1)
在哪里进行分离必须在另一个地方文件或超级列中进行cassandra。
提示#1,在使用Cassandra时,从词汇表中完全删除“超级列”一词。
我想知道是否建议在存储桶中对每个客户的数据进行分区?
这取决于。听起来您的查询主要基于客户ID,因此将其作为分区键的部分是有意义的。但是,如果每个客户分区下面都有数百万行和/或列,那就会变得非常大。
提示#2,正确的Cassandra建模是根据您所需的查询内容完成的。因此,如果没有真正看到您需要提供的查询类型,那么就很难具体而言。
如果您拥有与帐户和地址等相关的客户数据,那么构建仅customers
的PRIMARY KEY的customer_id
表可能有意义。但是,如果您发现需要通过email_address
查询客户(例如),那么您将需要创建一个customers_by_email
表,将数据复制到该表中,并创建支持的PRIMARY KEY这一点。
此外,如果您发现自己在客户活动中存储数据,则可能需要考虑customer_activity
表,其主要密钥为PRIMARY KEY ((customer_id,month),activity_time)
。这将使用customer_id
和month
作为分区键,存储由activity_time
聚类的客户活动。在这种情况下,如果我们没有使用month
作为附加分区键,则会不断地将每个customer_id
分区写入,直到它变得过于笨拙而无法写入或查询(未绑定的行增长)。
<强>摘要强>:
customer_id
是保持数据分离并确保每个查询仅限于单个节点的好方法。
- 构建分区键以解决未绑定的行增长问题,以免您将太多数据写入同一分区。