我正在使用Cassandra数据模型来存储用户上传的记录。
潜在的问题是,一些用户可能在5分钟内上传50-100k行,这可能导致分区键(user_id)的“热点”。 (如果每个分区超过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)
);
用例是:
答案 0 :(得分:5)
一些可能的想法:
使用复合分区键而不仅仅是user_id。分区键的第二部分可以是从1到n的随机数。例如,如果n为5,那么您的上传将分布在每个用户的五个分区上,而不是一个。缺点是当你进行读取时,你必须重复n次以读取所有分区。
使用rec_id作为分区键,有一个单独的表来处理传入的上传。这将在所有可用节点上平均分配上载的负载。然后,使用user_id作为分区键将数据放入表中,定期运行spark作业以提取新的上载,并以单个分区可以处理的速率将它们添加到基于user_id的表中。
修改前端以限制单个用户上传记录的速率。如果只有少数用户以足够高的速率上传以引起问题,则可能更容易限制它们而不是修改整个架构。