use*_*445 2 data-modeling cassandra nosql datastax
我正在研究Cassandra数据模型来存储用户上传的记录.
潜在的问题是,一些用户可能在5分钟内上传50-100k行,这可能导致分区键(user_id)的"热点".(如果每个分区超过10k行,Datastax建议重新考虑数据模型).
如何避免在短时间内在分区键上记录太多?
我尝试过使用Datastax的时间序列建议,但即使我有年,月,日,小时列,也可能会出现热点.
CREATE TABLE uploads (
user_id text
,rec_id timeuuid
,rec_key text
,rec_value text
,PRIMARY KEY (user_id, rec_id)
);
Run Code Online (Sandbox Code Playgroud)
用例是:
一些可能的想法:
使用复合分区键而不仅仅是user_id.分区键的第二部分可以是从1到n的随机数.例如,如果n为5,那么您的上传将分布在每个用户的五个分区上,而不是一个.缺点是当你进行读取时,你必须重复n次才能读取所有分区.
使用rec_id作为分区键,有一个单独的表来处理传入的上传.这将在所有可用节点上平均分配上载的负载.然后,使用user_id作为分区键将数据放入表中,定期运行spark作业以提取新上载,并以单个分区可以处理的速率将它们添加到基于user_id的表.
修改前端以限制单个用户可以上传记录的速率.如果只有少数用户以足够高的速率上传以引起问题,则可能更容易限制它们而不是修改整个架构.