Cassandra - 数据建模时间序列 - 避免 "Hot Spots"?

Cassandra - Data Modeling Time Series - Avoiding "Hot Spots"?

我正在研究 Cassandra 数据模型来存储用户上传的记录。

潜在的问题是,一些用户可能会在 5 分钟内上传 50-100k 行,这可能导致分区键 (user_id) 的 "hot spot"。 (如果每个分区超过 10k 行,Datastax 建议重新考虑数据模型)。​​

如何避免短时间内分区键上的记录过多?

我试过使用 Time Series suggestions from Datastax,但即使我有年、月、日、小时列,仍然可能出现热点。

CREATE TABLE uploads (
    user_id text
   ,rec_id timeuuid
   ,rec_key text
   ,rec_value text
   ,PRIMARY KEY (user_id, rec_id)
);   

用例是:

一些可能的想法:

  1. 使用复合分区键而不是 user_id。分区键的第二部分可以是从 1 到 n 的随机数。例如,如果 n 是 5,那么您的上传将分布在每个用户的五个分区上,而不是只有一个。缺点是当你读的时候,你必须重复n次才能读完所有的分区。

  2. 有一个单独的 table 来处理传入的上传,使用 rec_id 作为分区键。这将在所有可用节点上平均分配上传负载。然后将该数据放入 table 并使用 user_id 作为分区键,定期 运行 一个 spark 作业来提取新的上传并将它们添加到基于 user_id 的 table 以单个分区可以处理的速率。

  3. 修改您的前端以限制单个用户上传记录的速度。如果只有少数用户以足够高的速度上传导致问题,限制他们可能比修改整个架构更容易。