我正在学习NoSql,并与Cassandra合作。在我的测试数据集中,我有一些问题,每个问题都可以引用一个或多个主题(具有如下所示的关系模型的轻量级quora克隆)。
例如,有关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个问题。
这是一个合理的模型吗?
答案 0 :(得分:0)
欢迎来到卡桑德拉。当您具有关系数据库经验时,您将面临最常见的挑战,因为这种模型经常尝试应用于Cassandra。
在线上有多种资源可以帮助您理解这种新范式,例如rules of data modeling,DS201 in Datastax Academy,对于带有注释处理的示例,您还应该阅读{{3} }