我正在制作一个POC来展示Cassandra是如何工作的。我以Digg为例。我想创建一个数据模型,让我:
1)添加链接2)添加到用户收藏列表的链接。3)给链接附加预定标签
我想出了两个Column family:
- 链接
- url是关键
- id(生成的uuid)
- 用户(谁添加的)
- favCount(收藏链接的用户总数)
- upCount(点赞用户总数)
- downCount(不喜欢的用户数量)
- url是关键
UserFavs
- user是关键字
- id(与用户收藏的id相同)
- user是关键字
这对于上面的需求1和2来说很好,但是当我谈到需求3时,它就变得棘手了。我可以添加标签,如"java","语言","架构"作为列名与空值在链接列族。但是查询将花费很长时间,假设我要找到所有标记为"java"的链接。
谁能说说这是怎么实现的?
如果我对问题不清楚,请告诉我。
谢谢,Kumar
您可以创建一个二级索引,即在标签上键入一个列族。每行包含该特定标记的所有链接。注意,这可能会导致非常宽的行(即有许多列),其中每一行都将存储在单个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