当前位置: 首页 > 知识库问答 >
问题:

Cassandra-数据建模时间序列-避免“热点”?

温镜
2023-03-14

我正在开发一个Cassandra数据模型来存储用户上传的记录。

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

如何避免在短时间内一个分区键上有太多记录?

我尝试使用Datastax的时间序列建议,但即使我有年、月、日、小时列,热点仍然可能出现。

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

使用案例包括:

  • 按user_id获取所有上传记录
  • 按日期范围搜索上传记录

共有1个答案

季炯
2023-03-14

一些可能的想法:

>

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

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

    修改前端以限制单个用户可以上载记录的速率。如果只有少数用户以足够高的速率上传以导致问题,则限制它们可能比修改整个体系结构更容易。

  •  类似资料:
    • 我从一个用spark-kafka-cassandra(在kubernetes上)重写猛犸象spark-kafka-hbase应用程序的初步想法开始。 我有以下数据模型,一个支持全时插入,另一个支持upserts 办法1: 创建表test.inv_positions( location_id int, item bigint, time_id timestamp, sales_floor_qty i

    • 我正在研究一个用于存储时间序列的卡桑德拉数据模型(我是卡桑德拉新手)。我有两个应用程序:日内股票数据和传感器数据。 库存数据将以一分钟的时间分辨率保存。七个数据字段构建一个时间框架:符号、日期时间、开盘、高位、低位、收盘、成交量 我将主要通过符号和日期来查询数据。例如,给我2013年1月1日到2013年1月31日之间按日期时间排序的AAPL的所有数据。cassandra查询的建议是查询整列。所以你

    • 任何一个都可以,要求数据是一个字符串化的JSON对象。我的查询将返回用户在给定时间范围内的所有数据。哪种模式更有意义,或者有更好的方法来解决这个问题?

    • 我们目前正在调查卡桑德拉作为大型时间序列系统的数据库。 我已经通读了https://academy . datas tax . com/resources/getting-started-time-series-data-modeling关于Cassandra中时间序列数据建模的内容。 我们有许多气象站的高速时间序列数据。每个气象站都有许多“传感器”,每个传感器收集三个指标:温度、湿度和光照。 我

    • 编辑:我已经更改了模式,以便做出一些澄清。 每天都会为当天创建一个新表。所以一个表只包含一天的日志。 我的查询条件如下。 查询特定用户在特定日期(日期而不是时间)的所有日志。 因此原因、项目、价格和计数根本不会用作查询的提示或条件。

    • 问题内容: 如果我正在设计一个关于排序算法的测试,是否可以这样做以避免JVM预热?谢谢! 问题答案: JVM预热通常是指JVM查找代码的这些部分并将热点和JIT花费的时间。如果您运行实际测试几百次(我相信实际上是几千次),那么您应该相当不错。 但是,您应该知道,即使这样做,也无法保证。您必须对特定的JVM进行试验,以弄清关键部分被JIT之前必须要做的工作等等。 在这个小案例研究中,JIT编译在17