Cassandra或其他nosql db中很少建立模型

时间:2019-06-06 21:03:31

标签: cassandra nosql

我正在学习NoSql,并与Cassandra合作。在我的测试数据集中,我有一些问题,每个问题都可以引用一个或多个主题(具有如下所示的关系模型的轻量级quora克隆)。

Approximate relational model

例如,有关C ++内存管理的问题可能会涉及“ C ++编程”,“软件工程”和“位与字节”主题。我需要一个支持查询的模型,该查询返回所有引用特定主题的问题。天真的模型可能具有这样的表:

ReferencesTopic: name="<topic>", value=”{questionId[]}”

然后,对任何主题的查找将返回一个JSON Blob,其中包含引用该主题的问题的questionId列表。但是,这是一种“多对少”的关系(大约200个主题,每个主题都有数百万个QuestionId),因此似乎效率很低。

我的想法是针对给定主题对HasTopics进行细分,也许每个细分中有1000个QuestionId。这将有两个表:

TopicSegments:           name="<topic>", value="{topicSegmentId[]}"
ReferencesTopicSegment:  name=<topicSegmentId>, value="{questionId[]}"

这样做的好处是,由于最新的topicSegmentId位于topicSegmentId列表的底部,因此可以轻松查询给定主题的最新n个问题。

这是一个合理的模型吗?

1 个答案:

答案 0 :(得分:0)

欢迎来到卡桑德拉。当您具有关系数据库经验时,您将面临最常见的挑战,因为这种模型经常尝试应用于Cassandra。

  • Cassandra没有RDBMS之类的联接或外键关系。
  • 架构的设计应基于您将如何进行查询。
  • 非规范化是必须的,Cassandra可以复制数据。

在线上有多种资源可以帮助您理解这种新范式,例如rules of data modelingDS201 in Datastax Academy,对于带有注释处理的示例,您还应该阅读{{3} }