我正在学习nosql,和cassandra一起工作。在我的测试数据集中,我有一些问题,每个问题可能涉及一个或多个主题(一个轻量级的quora克隆,其关系模型如下所示)。
例如,一个关于c内存管理的问题,可能会涉及“c编程”、“软件工程”和“位和字节”主题。我需要一个模型,将支持查询,返回所有问题,涉及一个特定的主题。一个简单的模型可能有这样一个表:
ReferencesTopic: name="<topic>", value=”{questionId[]}”
然后,任何主题的查找都会返回一个json blob,其中包含引用该主题的问题的questionid列表。然而,这是一种“多对少”的关系(可能有200个主题,每个主题都有数百万个问号),因此看起来效率很低。
我的想法是为一个给定的主题划分hastopics,也许每个部分有1000个questionid。这将有两个表:
TopicSegments: name="<topic>", value="{topicSegmentId[]}"
ReferencesTopicSegment: name=<topicSegmentId>, value="{questionId[]}"
这样做的好处是能够轻松地查询给定主题的最近n个问题,因为最近的topicsegmentid位于topicsegmentid列表的底部。
这是一个合理的模式吗?
1条答案
按热度按时间kxkpmulp1#
欢迎来到Cassandra。当您有使用关系数据库的经验时,您会遇到最常见的挑战,因为这种模型经常被尝试应用于cassandra。
cassandra没有像rdbms那样的连接或外键关系。
模式的设计应该基于如何进行查询。
非规范化是必须的,与Cassandra是可以有重复的数据。
网上有很多资源可以帮助你理解这个新的范例,例如数据建模规则,datastax academy中的ds201,比如你的评论处理的例子,你也应该看看这篇文章中最后一个关于时间序列的pickle