【发布时间】:2019-10-22 09:55:42
【问题描述】:
我正在学习 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[]}"
这样做的好处是能够轻松查询给定主题的最近 n 个问题,因为最近的 topicSegmentId 位于 topicSegmentId 列表的底部。
这是一个合理的模型吗?
【问题讨论】: