让我们假设用户拥有博客帖子的数据模型。每个帖子都有一个独特的标题和许多属性。
我有一个列族“帖子”,其中每一行都是这样的:
posts = {
"yersterday" : {
date : 03-04-2012
userID : abfe222234
tags : "beatles,paul"
}
}
我想按用户对帖子编制索引,因此我有另一个常规列族:
user_posts = {
abfe222234 : {
yesterday : null
....
}
}
这个模型是在Cassandra进行了大量关于二级索引的研究之后得出的,其中我来到这些幻灯片:http://www.slideshare.net/edanuff/indexing-in-cassandra并且理解超级列族的使用越来越少。
我的问题:
如果您需要有关用户帖子的所有详细信息,则表示我必须阅读数据库两次:一次是获取所有帖子ID,一次是获取这些ID的所有帖子详细信息。
我错过了什么?
谢谢, Issahar。
修改
另一种选择是使“user_posts”成为超级CF,并使其包含“帖子”内的所有数据。
专业人士:您只需要获取所有数据一次。
缺点:1。您将复制所有数据。 2.您无法搜索帖子的一次属性。
你说什么?
答案 0 :(得分:1)
对我来说非常简单 - 在这种情况下,您确实需要执行两次数据库读取来获取数据。对于它的价值,大多数关系数据库也需要执行两个逻辑读取,除非用户感兴趣的数据完全包含在索引中。唯一的区别是在关系数据库中只有一次网络往返。