【问题标题】:Is a unique column good as partition key in Cassandra?在 Cassandra 中,唯一列是否可以用作分区键?
【发布时间】:2020-09-23 16:52:00
【问题描述】:

我有一个包含多个列的表用户,每个用户都有一个唯一的用户 ID。 因为它是唯一的,所以我不必指定集群键,除非我想在查询中使用该列。这很糟糕吗,因为每个分区都由一行组成?如果由于某种原因不好,在这种情况下最好的做法是什么? 感谢您的帮助!

编辑:如果我有一个需要返回所有用户名的查询,我怎样才能以良好的性能做到这一点?从这个表做这件事对我来说似乎不是很有效,我应该制作另一个表来简单地复制集合中的所有用户名吗?然后它们都在一个地方,读取不必跳过多个节点。

【问题讨论】:

    标签: database cassandra database-partitioning


    【解决方案1】:

    我只是answered the similar question。短篇小说 - 这实际上取决于访问模式和表格设置。您可能需要调整表参数以获得最佳性能,但设置可能取决于数据量和其他要求。

    【讨论】:

    • 非常感谢!
    【解决方案2】:

    在 Cassandra 中定义主键时总是有两个(主要)考虑因素:

    • 数据分布
    • 查询模式匹配

    从数据分布的角度来看,没有比使用唯一键作为分区键更好的了。它们越多,它们应该越均匀地散列,从而均匀分布。

    然而,一个分布良好但不符合所需查询模式的键是毫无用处的。

    tl;dr;

    如果这个唯一键是您用来查询表的全部,那么它是一个很好的分区键选择。

    【讨论】:

    • 非常感谢!如果我必须查询像电子邮件地址这样的另一列,我想在其中获取其他 2 列的值,那么它是否是创建用户表的物化视图的最佳方法,其中电子邮件地址作为分区键和查询所需的其他列?我有 4 列我必须查询表,用户数据不会改变,所以如果我创建 3 个物化视图并且读取应该非常快,那么不会有巨大的写入开销。这种方法好吗?还是我错过了一个大缺陷/有更好的选择吗?感谢您的帮助!
    • @dreivier 我会远离 MV,因为它们非常破碎。应通过将数据复制到键控不同的“查询表”中来满足其他查询。
    • 他们坏了是什么意思?它们不是与您推荐的“查询表”基本相同,但它们会自动更新吗?感谢您的帮助!
    • @dreivier MV 是一项从未完成的功能。它的“实验”状态证明了这一点。 stackoverflow.com/questions/62086421/…
    • 非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2015-07-18
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多