2013-06-28 104 views
1

我attemping使用以下CQL3语句更新一列族50K时间:卡桑德拉CQL3更新缓慢性能

update column_family 
set value_1 = ?, 
     value_2 = ?, 
     value_3 = ?, 
     value_4 = ?  
where partition_key = ?     
and column_key = ?;  

在此声明的重要的一块就是partition_key是相同的为所有50k记录。

我或者发送cassandra这个查询50k次,或者使用BATCH ...一次批量增加5000 ...应用BATCH;无论哪种方式,大约需要10分钟,没有网络延迟。我知道内部结构是一排宽的。这是为什么它很慢?

我也有内部结构是否正确?如果CF创建定制列表如下:

create table column_family (
    partition_key varchar, 
    column_key uuid, 
    value_1 int, 
    value_2 timestamp, 
    value_3 double, 
    value_4 double, 
    PRIMARY KEY(partition_key , column_key)    
); 

然后,我的内部CF将有partition_key作为分区键,列键将column_key(0)#_1,column_key(0)#_2,column_key(0 )#value_3,column_key(0)#value_4,coulmn_key(1)#value_1 .......

+2

你排除了它被客户绑定?你在使用哪个客户端?你尝试过并行插入批次吗? – Richard

+0

我还没有猜到。我正在使用astyanax。我没有尝试过并行化。我会看看#1和#3,谢谢。 –

回答

2

50K插入10分钟内平均每插入12ms。虽然速度很慢,但并不是非常缓慢。如果你的网络速度很慢,如果你在两个请求之间工作,一次只发送一个请求,那么我完全可以看到它是正常的。卡桑德拉不可能是你的瓶颈。尝试并行化客户端或尝试支持CQL3流水线的驱动程序(如Datastax驱动程序)。

1

为了排除对服务器端的性能问题,你应该检查出的写入延迟..

可以使用datastax' ops center检查。 如果不是,请尝试使用C *附带的cli工具。

nodetool cfhistograms keyspacename cfname