2013-03-20 26 views
3

我想了解在Cassandra(v1.2)中获取大量顺序存储在磁盘中的行时涉及的开销。为Cassandra中的partitionID提取许多(500K)行的开销

下面的模式:

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

PKEY(时间戳的DeviceID)。
每个记录是80个字节。

我想获取特定TimeStamp(partitionID)的所有行。

SELECT * FROM模式其中timestamp =“...”

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

(A)我查询的所有数据是否会按顺序存储在磁盘中,用于特定的TimeStamp(并且是的,我已经运行了compact命令)? (B)如果对第一个qn的回答是肯定的,那么为什么我无法获得与磁盘相同的吞吐量(40 MB/s)?请注意,我能够在25-30秒内检索到40 MB的数据,这相当于1.5 MB/s。 (C)如果对上述第一个问题的回答是肯定的,那么我可以进一步加快回应吗? (D)序列化/反序列化是缓慢吞吐量的罪魁祸首吗?如果是这样,可以做些什么来完全避免它?

回答

0

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

B)答案A是否定的,那么大概没有

C)回答到B是否定的,你仍然应该能够时间不同的查询和检测瓶颈来提高速度。运行此命令后使用cqlsh:

cqlsh>跟踪 现在正在跟踪请求。

并运行您要检查的查询/查询并查看节点之间的不同交互。你可以用它来检查是否使用ButeOrderedPartitioner以你需要的方式存储五个partitionID D)它不应该是一个问题,但为了防止在cqlsh上运行相同的查询并跟踪到时间C

解释的请求希望它有帮助!