Cassandra中的二级索引将导致两次DB读取

时间:2012-03-04 16:08:28

标签: cassandra indexing

让我们假设用户拥有博客帖子的数据模型。每个帖子都有一个独特的标题和许多属性。

我有一个列族“帖子”,其中每一行都是这样的:

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.您无法搜索帖子的一次属性。

你说什么?

1 个答案:

答案 0 :(得分:1)

对我来说非常简单 - 在这种情况下,您确实需要执行两次数据库读取来获取数据。对于它的价值,大多数关系数据库也需要执行两个逻辑读取,除非用户感兴趣的数据完全包含在索引中。唯一的区别是在关系数据库中只有一次网络往返。