嵌套在超列系列中有多深?

时间:2012-08-24 05:02:26

标签: cassandra

我试图了解卡桑德拉的数据库模型,但我没有太多运气。几乎所有的文档都是解释Twissandra,一个推特克隆,但它实际上是一个相当简单的案例,并没有真正帮助学习如何有效地使用Cassandra;或者它是非常基本的低级别的东西,它们并没有真正显示你在现实世界中通常使用列/超级列做的事情。

所以我认为一个论坛将是一个足够复杂的应用程序来学习。假设一个有点像phpBB的网络论坛;您可以拥有多个论坛,每个论坛都显示多个主题,每个主题都有多个帖子。

我首先考虑使用单独的帖子,主题和论坛列,但这与我在RDBMS上实现它的方式没什么不同。

所以现在我想知道嵌套在超列族中有多深。类似下面的伪模型是一种适当的建模方法吗?

Forums = {
    forum001: {
        name: "General News",
        topics: {
            topic000001: {
                subject: "This is what I think",
                date: "2012-08-24 10:12:13",
                posts: {
                    post20120824.101213: { username: "tom", content: "Blah blah", datetime: "2012-08-24 10:12:13" }
                    post20120824.101513: { username: "dick", content: "Blah blah blah", datetime: "2012-08-24 10:15:13" }
                    post20120824.103213: { username: "harry", content: "Blah blah", datetime: "2012-08-24 10:32:13" }
                }
            },
            topic000002: {
                subject: "OMG Look at this",
                date: "2012-08-24 10:42:13",
                posts: {
                    post20120824.104213: { username: "tom", content: "Blah blah", datetime: "2012-08-24 10:42:13" }
                    post20120824.104523: { username: "dick", content: "Blah blah blah", datetime: "2012-08-24 10:45:23" }
                    post20120824.104821: { username: "harry", content: "Blah blah", datetime: "2012-08-24 10:48:21" }
                }
            }
        }
    },
    forum002: {
        name: "Specific News",
        topics: {
            topic000003: {
                subject: "Whinge whine",
                date: "2012-08-24 10:12:13",
                posts: {
                    post20120824.101213: { username: "tom", content: "Blah blah", datetime: "2012-08-24 10:12:13" }
                    post20120824.101513: { username: "dick", content: "Blah blah blah", datetime: "2012-08-24 10:15:13" }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

  1. 除非您正在编写您不打算直接查询的JSON文档,否则您无法拥有该级别的嵌套。
  2. 您不应该使用supercolumns,因为它们已被弃用。
  3. Chris对你的问题的评论是绝对正确的:第一项业务是询问你自己打算如何查询数据,然后像你想要阅读一样写。有时这意味着写多种方式(即规范化不是目标)。
  4. 您可以使用复合键和/或列来获得额外的“嵌套”。
  5. 由于您只能按键和按键进行查询列范围,或使用二级索引,您通常需要为不适合辅助索引的列编写自己的索引(即具有高基数)。
  6. 我知道这些规则不会为您提供模型,但您的模型完全依赖于查询。与RDBMS相比,这是一种看待世界的不同方式。如果你真的需要临时查询支持(许多用例确实没有),Cassandra不是正确的选择。