2011-12-11 102 views
2

我正在研究POC以展示卡桑德拉如何工作。我以Digg为例。我想创建一个数据模型,让我:卡桑德拉数据模型

1)添加链接 2)添加一个链接到用户收藏夹列表。 3)添加预定标记,以链接

我想出了具有两个列族:

  1. 链接

    • url是关键
      • ID(生成UUID)
      • 用户(谁加了它)
      • favCount(我们没有ERS谁收藏的链接)
      • UPCOUNT(没有谁喜欢它的用户)
      • 向下计数(没有谁不喜欢它的用户)
  2. UserFavs的

    • 用户是键
      • id(与用户收藏的许多ID一样)

这工作正常需求#1和上述第2条,但是当我来到#3它变得棘手。我可以在链接列系列中添加标记,如'java','语言','架构'作为具有空值的列名称。但是查询需要很长时间,比如说,如果我要找出所有在'java'下标记的链接。

任何人都可以抛出一些关于如何实现的想法。

如果我不清楚这个问题,请让我知道。

感谢,库马尔

回答

3

您可以创建一个二级指标,即一列族键上的标签。每行包含该特定标签的所有链接。请注意,这可能会导致非常宽的行(即有很多列),每行都将存储在单个cassandra节点上。如果它们变得非常大,你可能想要一个方案来分解它们。

参见http://www.datastax.com/docs/0.7/data_model/cfs_as_indexes

http://pkghosh.wordpress.com/2011/03/02/cassandra-secondary-index-patterns/

或者google cassandra secondary index

+0

由于DNA。有没有办法做到这一点,而不需要另一个列家族?不得不插入到两个不同列家族的链接的缺点是,由于cassandra在多列家族级别没有交易(我记得那样,但我可能是错的),可能会发生链接插入链接列家族中,但不插入标签标签列族中。还是我让你完全错了?如果是这样,请具体说明您的建议。谢谢 – KumarM

+0

你对交易是正确的 - 这是Cassandra设计的限制。可以使用重试或撤消来应付这种情况(实际上这种情况非常罕见,特别是如果两个插入都是在同一个消息中发送的话)。 – DNA