cassandra - 在 Cassandra 中为 partitionID 获取许多(500K)行的开销

标签 cassandra

我想了解在 Cassandra (v1.2) 中获取大量顺序存储在磁盘中的行时涉及的开销是多少。

具有以下架构:

  • 时间戳
  • 设备编号
  • 设备名称
  • 设备所有者
  • 设备颜色

PKEY(时间戳,设备 ID)。
每条记录为80字节。

我正在尝试获取特定时间戳 (partitionID) 的所有行。

从 TimeStamp = ‘…’ 的架构中选择 *

每个时间戳有 500K 个这样的行。我已经发现进行分页会比尝试一次获取所有内容提供更好的吞吐量。因此,要获取 500 K 行(40 MB),使用 1000/10000 的页面大小,大约需要 25-30 秒(我使用的是 Astyanax)。我有以下问题:

(A) 我正在查询的所有数据是否会按特定时间戳顺序存储在磁盘中(是的,我已经运行了压缩命令)?

(B) 如果第一个问题的答案是肯定的,那么为什么我无法获得与磁盘 (40 MB/s) 相等的吞吐量?请注意,我能够在 25 到 30 秒内检索到 40 MB 的数据,换算成不到 1.5 MB/s。

(C) 如果上面第一个问题的答案是肯定的,那我可以进一步加快响应速度吗?

(D) 序列化/反序列化是吞吐量低的罪魁祸首吗?如果是这样,是否可以采取一些措施来完全避免这种情况?

最佳答案

A) 这取决于您为集群配置的分区程序(在 cassandra.yaml 文件中),因为您是新手,您可能使用的是默认设置的分区程序 (MurMur3Partitioner),这意味着您的问题的答案是不,数据被拆分到1个或多个物理节点内的monsgt不同节点(或虚拟节点),这意味着数据存储在磁盘上和不同物理节点上的不同部分。

B) 对 A 的回答是否定的,所以可能不是

C) 对 B 的回答是否定的,您仍然应该能够对不同的查询进行计时并检测瓶颈以提高速度。运行此命令后使用 cqlsh:

cqlsh> 跟踪 现在跟踪请求。

并运行您要检查的查询,并查看节点之间的不同交互。在使用 ButeOrderedPartitioner 时,您可以使用它来检查 fiven partitionID 是否以您需要的方式存储

D) 这应该不是问题,但以防万一在 cqlsh 上运行相同的查询并跟踪请求的时间,如 C 中所述

希望对您有所帮助!

关于cassandra - 在 Cassandra 中为 partitionID 获取许多(500K)行的开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15516782/

相关文章:

cassandra - 如何在 Cassandra 中的集群键内使用静态列

node.js - Cassandra:操作超时

cassandra - 连接到 Cassandra 集群而不是特定节点

具有过时数据删除可能性的 Cassandra 数据模型

Cassandra 的 Mongodb 聚合框架替代方案

ruby - Cassandra Ruby gem 获取列

cassandra - Hbase vs Cassandra vs Kafka 用于高分辨率时间序列数据存储

cassandra - 在创建的表中查找列的数据类型

Cassandra 返回数值的无序结果集

mysql - 导入表的Sqoop命令