【问题标题】:Cassandra - Same partition key in different tables - when it is right?Cassandra - 不同表中的相同分区键 - 什么时候合适?
【发布时间】:2019-05-19 18:41:03
【问题描述】:

我对我的 Cassandra 进行建模,使我有几个表具有相同的分区键 - Uuid。

每个表都有它的分区键和代表我想询问的特定查询的数据的其他列。

例如 - 1 个表具有 Uuid 和关于其状态的列(此表中没有其他集群键),表 2 将包含相同的 Uuid(也没有集群键),但不同的列表示此 Uuid 的数据。

这是正确的建模吗?在表周围复制相同的分区键以将每个表分组以保存特定用例的相关列是否错误?或者它更喜欢只使用 1 个表并查询它们并为代码中的特定用例获取相关数据?

【问题讨论】:

    标签: cassandra-2.0 cassandra-3.0 partition scylla


    【解决方案1】:

    这种建模没有任何错误。与只有一张表包含两种数据的明显替代方案相比,它是更好还是更差,取决于您的工作量: 例如,如果您通常需要读取同一 uuid 的状态和数据列 both,那么如果两者都在同一个表中,这些读取会更有效,只需查找一次.如果您总是只读取一个而不是两个都读取,那么从单独的表中读取会更有效。此外,如果这个工作负载不是以读为主,而是以写为主,那么只写一个表而不是两个表会更有效。

    【讨论】:

    • 实际上,状态表被多次读取,偶尔更新一次,数据读取很少。我们将创建几个包含相同分区键但每个表将包含其他列回答特定问题的表是常见的情况吗?或者大多数时候我们会创建大表并查询不同的 SELECT 查询返回所需的数据?
    • 您能否提供一些支持您答案的文件的参考资料?
    • 我不知道你在寻找什么样的参考,谷歌可能会比我更好地帮助你。但一个好的起点是datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling。它提到了诸如“数据重复是 Cassandra 生活中的一个事实。不要害怕它”这样的规则。但是“当您发出读取查询时,您希望从尽可能少的分区中读取行。”,但请阅读整个内容。当然,当您注意到“规则”冲突时,您需要选择与您的特定用例最相关的一个。
    猜你喜欢
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2011-03-10
    相关资源
    最近更新 更多