Cassandra中的宽行与集合

时间:2015-07-29 12:22:57

标签: cassandra data-modeling cql cql3 nosql

我正在尝试在Cassandra中建立多对多关系,例如Item-User关系。用户可以喜欢很多物品和物品可以被很多用户购买。让我们也假设"喜欢"的顺序。事件发生不是一个问题,最常用的查询只是返回"喜欢"基于项目和用户。

有几篇文章涉及数据建模 http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/

另一种方法是在User表中存储ItemID的集合,以表示该用户喜欢的项目,并在CQL3的Items表中执行类似的操作。

问题

  1. 使用该系列是否有任何打击效果?我认为他们会转化为复合列?那么读取模式,缓存和其他因素应该类似吗?

  2. 对于写入繁重的应用程序,集合的性能是否较差?更新集合的频率往往较低吗?

1 个答案:

答案 0 :(得分:1)

我可以想到使用宽行而不是集合的一些优点:

  1. 集合中允许的元素数为65535(无符号短)。如果你的集合中可能有多个记录,那么使用宽行可能会更好,因为这个限制要高得多(每个分区20亿个单元格(行*列))。
  2. 读取集合列时,每次都会读取整个集合。将其与宽行进行比较,您可以在其中限制查询中读取的行数,或者根据群集密钥限制查询条件(即日期> 2015-07-01)。
  3. 对于您的特定用例,我认为对'items_by_user'表进行建模比'用户'表中的list<item>列更理想。