1

我正在尝试使用以下 CQL3 语句将列族更新 50k 次:

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

这里要说明的重要一点是 partition_key 对于所有 50k 记录都是相同的。

我要么向 cassandra 发送此查询 50k 次,要么使用 BATCH ... APPLY BATCH 一次批量处理 5000 个;无论哪种方式,都需要大约 10 分钟,而没有网络延迟可言。我知道内部结构是一排宽的。这就是它慢的原因吗?

我的内部结构也正确吗?如果 CF 创建 CQL 如下所示:

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)#value_1, column_key(0)#value_2, column_key(0)#value_3, column_key(0)#value_4, coulmn_key(1)#值_1 .......

4

2 回答 2

3

在 10 分钟内插入 50K 次,平均每次插入需要 12 毫秒。虽然这很慢,但并不是非常慢。如果您的网络速度较慢,如果您确实在请求之间工作,并且一次只发送一个请求,那么我完全可以看到它是正常的。Cassandra 听起来不太可能是您的瓶颈。尝试并行化您的客户端或尝试支持 CQL3 流水线的驱动程序(如 Datastax 驱动程序)。

于 2013-06-28T19:22:01.130 回答
1

要排除服务器端的性能问题,您应该检查写入延迟。

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

nodetool cfhistograms keyspacename cfname
于 2013-07-04T08:20:50.850 回答