【问题标题】:Cassandra CQL3 update slow performance on a single wide rowCassandra CQL3 更新单个宽行上的缓慢性能
【发布时间】:2013-07-04 16:20:50
【问题描述】:

我正在尝试使用以下 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)#value_1 .......

【问题讨论】:

  • 你排除了它是客户端绑定的吗?您使用的是哪个客户端?您是否尝试过并行插入批次?
  • 我猜我没有。我正在使用astyanax。我没有尝试并行化。我会研究 #1 和 #3,谢谢。

标签: cassandra cql3


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    您可以使用datastax' ops center 进行检查。 如果不行,试试C*自带的cli工具。

    nodetool cfhistograms keyspacename cfname
    

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 2015-11-09
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 2017-06-15
      • 2013-05-15
      • 1970-01-01
      相关资源
      最近更新 更多