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

Cassandra中的二级索引将导致两次DB读取,cassandra,indexing,Cassandra,Indexing,让我们假设一个数据模型,其中用户有博客文章。每个帖子都有一个独特的标题和许多属性 我有一个列族“posts”,其中每一行如下所示: posts = { "yersterday" : { date : 03-04-2012 userID : abfe222234 tags : "beatles,paul" }

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

我有一个列族“posts”,其中每一行如下所示:

posts = {
    "yersterday" : { 
                     date : 03-04-2012
                     userID : abfe222234
                     tags : "beatles,paul"
                   }
        }
我想按用户对文章进行索引,因此我有另一个常规列系列

user_posts = {
      abfe222234 : {
                     yesterday : null
                     ....
                   }
             }
这个模型是在对Cassandra中的二级索引进行了大量研究之后建立的,在这些幻灯片中,我了解到超级列族的使用越来越少

我的问题:

如果您需要有关用户帖子的所有详细信息,这意味着我必须读取DB两次:一次用于获取所有帖子ID,一次用于获取这些ID的所有帖子详细信息

我错过了什么

谢谢, 伊萨哈

编辑:

另一个选项是使“user_posts”成为超级CF,并使其包含“posts”中的所有数据

优点:您只需获取一次所有数据

缺点:1。您将复制所有数据。2.无法搜索帖子的“一次”属性


你说什么?

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

如果有数百个帖子呢?你怎么取?用“输入('a','b',…)”构建一个非常长的CQL?这似乎不对!慢慢地,我想。说真的,使用谓词似乎是合乎逻辑的方法。例如,请参见“在读取或写入数据时,可以原子地读取/写入一个特定键(行)的一组列。这组列可以由列表列名指定,也可以由切片谓词指定,假设列以某种方式排序(这是一个配置参数)”但它们根本没有分类。你有用户A的帖子,然后是用户B的帖子,然后是用户A的帖子。顺便说一句,我会说希伯来语,所以谢谢你的指针…:)那很方便!我想提请您注意我评论中的一个特殊短语:这组列可以是列表列名指定的。我想您需要打包从索引中获得的所有列名,然后将它们发送回服务器作为筛选器。谢谢您的帮助。你觉得我应该换一种型号吗?就像我在为博文编辑时写的超级CF一样?