【问题标题】:Unique partition key or grouping partition key for bulk analysis用于批量分析的唯一分区键或分组分区键
【发布时间】:2018-07-10 21:23:30
【问题描述】:

我想查看某个时间段内每个用户的每个值。

我的主键是否应该是(user_id, timestamp),这样我才能点击每个节点并让集群键窗口关闭。

或者我的主键应该是(day_of_year, timestamp) 以便我的分区键找到节点的子集,并且我使用时间戳集群键来实现对时间段的更细粒度的控制。

【问题讨论】:

  • 您的数据库设计应该满足您所有的业务需求,而不仅仅是一份报告。

标签: sql cassandra data-modeling


【解决方案1】:

您需要估计(day_of_year, timestamp) 创建的分区将拥有的数据。如果分区大小超过 100 MB,那么这可能会在将来的修复过程中给您带来问题。所以,如果你有可能超过 100 MB 这样的分区,那么你应该选择(user_id, timestamp)。它还将在整个节点上分配工作量,而不是只集中在一个节点上。

要了解分区大小,您可以运行nodetool cfstats。在输出中,检查 Compacted partition maximum bytes 的值。不能保证它在所有地方都是最大的分区,但它会告诉你在运行命令的节点上压缩的最大分区大小。

【讨论】:

  • 我知道高基数密钥和 100MB 分区大小的危险。本质上,我想知道在数据科学家希望使用集群中的每台机器与数据工程师希望在任何给定时间很少有机器应该处于活动状态之间的权衡是什么。
  • 就个人而言,我会选择数据科学家的方法。我认为这不是一个让节点超载而让其他节点不理会的好方法。
猜你喜欢
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 2012-06-15
相关资源
最近更新 更多