cassandra中的复合分区键

时间:2014-07-31 12:08:10

标签: composite-primary-key cassandra-2.0

我有下表:

CREATE TABLE选项卡 ( userID varchar, grpID varchar, itemID varchar, 时间戳bigint, PRIMARY KEY());

我需要在这个表上执行以下查询,其中:

  • userID = x
  • userID = x和grpID = y
  • userID = x和grpID IN(a,b,c)

此外,结果应按时间戳字段按降序排序,这使得时间戳成为我的聚类键。

我希望避免重复数据或使用2个主键创建相同的表来实现我的查询。

现在我的主键应该是什么,以便我能够执行所有这些查询?

1 个答案:

答案 0 :(得分:1)

你无法通过限制来实现这一切

  • PK(userID,timestamp) - 您将无法在grpID上添加条件,但您可以通过ts进行排序
  • PK(userID,grpID) - 您可以执行所有3个查询,但排序不会按时间戳分类
  • PK((userID,grpID),时间戳)您可以执行查询2和3并按时间戳排序,但无法只查询userID=x

如果检索到的行不是很大,您可以执行客户端排序 - 或者您可以使用辅助索引。辅助索引自动创建并保留新表(因此重复数据,违反您的条款!)但应允许您执行所有操作。辅助索引不允许IN运算符,因此您应该选择userID作为查找键。

顺便说一下:NoSQL中的非规范化非常正常 - 因此数据复制在这种情况下是常见的。

HTH,Carlo