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

时间:2013-03-20 06:30:34

标签: cassandra

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

使用以下架构:

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

PKEY(TimeStamp,DeviceID)。
每条记录都是80字节。

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

从架构中选择*,其中TimeStamp ='...'

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

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

(B)如果对第一个qn的回答是肯定的,那为什么我不能让吞吐量等于磁盘(40 MB / s)?请注意,我能够在25-30秒内检索到40 MB的数据,这相当于1.5 MB / s。

(C)如果对上述第一个问题的回答是肯定的,那么我可以进一步加快回复吗?

(D)序列化/反序列化是吞吐量慢的罪魁祸首吗?如果是这样,可以做些什么来完全避免它?

1 个答案:

答案 0 :(得分:0)

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

B)回答A是否,所以可能没有

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

cqlsh>追踪 现在跟踪请求。

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

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

中所述

希望它有所帮助!