nosql由客户端分隔数据

时间:2017-01-08 18:51:06

标签: cassandra couchbase nosql

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

就我而言,不同客户之间永远不会有请求。 数据可以完全分开。

对于couchbase,我看到每个桶的内存容量都是为他保留的。

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

谢谢

1 个答案:

答案 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_idmonth作为分区键,存储由activity_time聚类的客户活动。在这种情况下,如果我们没有使用month作为附加分区键,则会不断地将每个customer_id分区写入,直到它变得过于笨拙而无法写入或查询(未绑定的行增长)。

<强>摘要

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