我想了解当在Cassandra(v1.2)中获取顺序存储在磁盘中的大量行时所涉及的开销是多少。
使用以下架构:
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)序列化/反序列化是吞吐量慢的罪魁祸首吗?如果是这样,可以做些什么来完全避免它?
答案 0 :(得分:0)
A)它取决于您为群集配置的分区程序(在cassandra.yaml文件中),因为您是新手,您可能正在使用默认情况下的分区(MurMur3Partitioner),这意味着您的问题的答案是不,数据在一个或多个物理节点内被拆分为不同节点(或虚拟节点),这意味着数据存储在磁盘上和不同物理节点上的不同部分中。
B)回答A是否,所以可能没有
C)对B的回答是否定的,你应该能够计时不同的查询并发现瓶颈以提高速度。运行此命令后使用cqlsh:cqlsh>追踪 现在跟踪请求。
并运行要检查的查询/查询,并查看节点之间的不同交互。您可以使用它来检查在使用ButeOrderedPartitioner时是否以您需要的方式存储了fiven partitionID
D)它不应该是一个问题,但是以防万一在cqlsh上运行相同的查询并跟踪时间请求,如C
中所述希望它有所帮助!