使用包含单行分区的 Cassandra 表是一种不好的做法吗?

2024-03-04

假设我有一张这样的桌子

CREATE TABLE request(
  transaction_id text,
  request_date timestamp,
  data text, 
  PRIMARY KEY (transaction_id)
);

据我了解,transaction_id 是唯一的该表中的每个分区只有一行我不确定这种情况是否会导致操作系统出现性能问题,也许是因为 Cassandra 为每个分区创建一个文件,导致需要为其托管操作系统管理大量文件,请注意,我不确定 Cassandra 如何创建其文件对于它的桌子。

在这种情况下,我可以通过其 transaction_id 找到请求,例如

select data from request where transaction_id = 'abc';

如果前面的假设是正确的,那么下一个可能会采用不同的方法?

CREATE TABLE request( 
  the_date date, 
  transaction_id text, 
  request_date timestamp, 
  data text, 
  PRIMARY KEY ((the_date), transaction_id)
);

the_date每隔一天都会发生变化,因此表中的分区将为每天创建。

在这种情况下我必须有the_date数据总是可用的发送给客户端,以便我可以使用下一个查询找到请求

select data from request where the_date = '2020-09-23' and transaction_id = 'abc';

预先感谢您的帮助!


Cassandra 不会为每个分区创建单独的文件。一个SSTable文件可能包含多个分区。仅包含一行的分区通常称为“瘦行” - 它们并不是很糟糕,但可能会导致一些性能问题:

  • 要访问此类分区,您仍然需要读取包含压缩数据的块(默认情况下为 64Kb),需要解压缩才能读取该数据。如果您正在进行真正的随机访问,这些块将从文件缓存中丢弃,并且需要从磁盘重新读取。在这种情况下,减小块大小可能有用
  • 如果每个节点的每个表有很多这样的分区 - 这可能会大大增加布隆过滤器的大小,因为每个分区都有一个单独的条目。我看到一些客户为布隆过滤器分配了数十GB的内存,只是因为分区很薄

所以这实际上取决于数据量、访问模式等。它可能是好是坏,取决于这些因素。

如果您有可用的日期,并且希望将其用作部分分区键 - 这也可能是不可取的,因为如果您在那天写入和读取大量数据,那么只有某些节点会处理该负载 - 就是这样 -称为“热分区”。

当您从数据推断分区键时,您可以实现所谓的分桶。但这将取决于可用的数据。例如,如果您将日期 + 事务 ID 作为字符串,则可以将分区键创建为日期 + 该字符串的第一个字符 - 在这种情况下,您每天将有 N 个分区键,这些分区键分布在节点之间,从而消除了热分区问题。

See the 来自 DataStax 的相应最佳实践文档 https://docs.datastax.com/en/landing_page/doc/landing_page/dataModel.html#Checktablestructure关于那个话题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用包含单行分区的 Cassandra 表是一种不好的做法吗? 的相关文章

随机推荐

  • 如何使用 MATLAB 以定时间隔采集图像?

    我是 MATLAB 初学者 我想知道如何从相机中以 5 秒的间隔采集并保存 20 张图像 非常感谢 首先构造一个视频输入接口 vid videoinput winvideo 1 RGB24 400x300 您需要调整网络摄像头的最后一位 要
  • SQL Server:内联表值 UDF 与内联视图

    我正在使用一个医疗记录系统 该系统将数据存储在类似于电子表格的结构中 列标题中的日期 时间 每行第一列中的测量值 例如医生姓名 Rh 血型 以及一个值在相交的单元格中 基于此构造的报告通常需要显示 10 个或更多这些度量 出于报告目的 数据
  • 循环遍历阵列 MIPS 组件

    我正在开发一个循环遍历 10 个数字的数组的程序 前 9 个元素的值大于 0 第 10 个元素的值为 0 遇到 0 时循环应中断 i 0 while A i 0 A i A i 1 i 我知道如果寄存器的值等于 0 我可以使用 beq 来中
  • WCF 查询拦截器:此 MSDN 示例是否存在安全风险?

    如果你看this http msdn microsoft com en us library dd744837 aspxMSDN 文档中有一个示例 代码如下 Define a change interceptor for the Produ
  • 给出一个通用枚举类型作为模板参数

    简而言之 有什么方法可以喂养General模板化类仅代表一个enum类型 就像是 template
  • Bootstrap 3 删除内联输入之间的空间

    我正在做一个简单的内联表单 如何调整每个输入表单之间的空白 我想让输入基本上接触 div class row div
  • 如何导入带有回调函数的外部JS?

    我正在使用 Google API 根据他们的链接我必须将以下脚本放入 HTML 文件中 client js加载成功后正在加载自定义回调函数 function callback var ROOT https your app id appsp
  • SyntaxError:IncomingMessage 处 JSON.parse () 处的 JSON 输入意外结束。

    我正在尝试制作一个天气应用程序 并且正在使用天气 API 来获取信息 但是当我尝试解析 JSON 数据时会出现此错误 SyntaxError Unexpected end of JSON input at JSON parse
  • java中Iterator()的时间复杂度

    我是 Java 新手 我有一个关于java iterator 的时间复杂度的问题 Set
  • pandas 中的 read_table 和 read_csv 有区别吗?

    我已经对其进行了测试 并检查了文档 没有发现明显的差异 无论哪种方式 我都想问以防万一 您是否认为 read csv 应该仅用于 csv 即使它适用于其他类型 而 read table 有什么作用 它们存在时是否相同 您可以使用其中之一来处
  • 使用 Google+ 环聊 API

    如果有人添加 电子邮件受保护 cdn cgi l email protection到他的 Google Hangout 联系人并向其发送一条 Google Hangout Chat 消息 我想从我的服务器设置自动回复他的聊天 有没有办法做到
  • C# 遍历二维数组

    for int k 0 k lt odds GetLength 1 k 上面的代码行应该迭代 Double 类型的二维数组 但不断抛出以下异常 索引超出范围异常 有哪位好心人能解释一下原因并提供解决方案吗 非常感谢 您正在将无效索引传递给G
  • 是否可以为条形图中的每个类别自定义标签?

    最近 我收到一个要求 需要创建一个显示每个项目数据的条形图 这是一个例子 如您所见 Category是项目的名称 并且Series是该项目中不同类型的数据 但是 由于系统不保证项目名称的唯一性 将其用作类别可能会导致问题 并且我将无法使用项
  • CakePHP Cookie 被打乱 - Suhosin 相关

    由于某种原因 在设置后 我无法在任何页面上读取 CakePHP 应用程序中的任何 cookie 唯一返回的是乱码文本 我的代码很简单 this gt Cookie gt write Region test reg this gt Cooki
  • Linux 系统调用的内部结构

    当线程通过引发中断 80 进行系统调用时会发生什么 详细 Linux 对线程的堆栈和其他状态做了什么工作 对处理器进行了哪些更改才能将其置于内核模式 运行中断处理程序后 控制权如何恢复到调用进程 如果系统调用无法快速完成怎么办 例如从磁盘读
  • 有没有办法让 SQLAlchemy 不在 BEGIN 和 COMMIT 中包装 SQL 写入?

    我在 Pylons 1 0 框架上使用 SQLAlchemy 0 6 4 我已经尝试了将 autoflush 和 autocommit 设置为 True 和 False 的所有排列 但我发现 SQLAlchemy 想要包装所有 SQL 会话
  • R 包不存在

    我收到了可怕的包裹R不存在 它要了我的命 代码很好 我在市场上有运行该代码的应用程序 现在效果很简单webview应用程序 的 0 R string app name我的有错吗main xml and string xml很好 我很困惑 我
  • Libgdx - 支持 OpenGL 4+

    是否可以仅使用 Libgdx 进行桌面开发并从 Libgdx 抽象访问较新版本的 Opengl 我的意思是 如果你想开发移动应用程序 你将必须使用 Opengl ES 的某个版本 它不支持经典 Opengl 那样的很多功能 例如绘制线框等
  • Django-channels:ChatConsumer 仅向一个用户发送消息,而不是向两个用户发送消息

    我正在使用 django channels 和 redis 在 django 和 Angular 中实现聊天应用程序 套接字已连接并正常工作 但我面临的问题是 当两个用户在线并使用相同的线程 url 连接同一个聊天室时 它会连接 但任何用户
  • 使用包含单行分区的 Cassandra 表是一种不好的做法吗?

    假设我有一张这样的桌子 CREATE TABLE request transaction id text request date timestamp data text PRIMARY KEY transaction id 据我了解 tr