在我的场景中改进cassandra读取时间

时间:2014-06-12 17:00:08

标签: performance testing cassandra

我使用Astyanax编写的客户端使用默认配置测试单节点Datastax Cassandra 2.0。

在我的场景中,有一个CF,每行包含密钥(解析为字符串的自然数)和一列,保留1kB的随机文本数据。

客户端执行插入行的操作,直到数据大小达到50GB。它的速度为3000 req / sec,这对我来说足够了。 下一步是读取所有这些数据,其顺序与插入顺序相同。而这里出现问题。让我们看看我的程序生成的示例日志:

reads   writes  time    req/sec
99998   0       922,59  108
100000  0       508,51  196
100000  0       294,85  339
100000  0       195,99  510
100000  0       137,11  729
100000  0       105,48  948
100000  0       105,83  944
100000  0       76,05   1314
100000  0       71,94   1389
100000  0       63,34   1578
100000  0       63,91   1564
100000  0       65,69   1522
100000  0       1217,52 82
100000  0       725,67  137
100000  0       502,03  199
100000  0       342,17  292
100000  0       336,83  296
100000  0       332,56  300
100000  0       330,27  302
100000  0       359,74  277
100000  0       320,01  312
100000  0       369,02  270
100000  0       774,47  129
100000  0       564,81  177
100000  0       729,50  137
100000  0       656,28  152
100000  0       611,29  163
100000  0       589,29  169
100000  0       693,99  144
100000  0       658,12  151
100000  0       294,53  339
100000  0       126,81  788
100000  0       206,13  485
100000  0       924,29  108

吞吐量不稳定,而且相当低。

我对任何帮助感兴趣,这可能会缩短阅读时间。 我也可以提供更多信息。

感谢您的帮助!

库巴

1 个答案:

答案 0 :(得分:0)

我猜你正在按顺序进行阅读。如果你并行执行它们,你应该能够每秒执行更多操作。

更新以解决单一读取延迟:

读取延迟可能受以下变量的影响:

  • 内存中的行(Memtable或Row cache)?
  • 该行散布了多少个sstables?
  • 这行有多宽?
  • 需要扫描多少列才能找到您要查找的列?
  • 你是从行尾看到的吗?
  • 这行是否有tomstones?
  • 您使用的是平整或大小分层的压实吗?
  • sstables是否在磁盘缓存中?
  • 协调员需要等待多少个副本?
  • 节点同时服务多少个其他请求?
  • 网络延迟
  • 磁盘延迟(轮换)
  • 磁盘利用率(队列大小/等待) - 可能受到压缩影响
  • 磁盘预读大小
  • Java GC暂停
  • CPU利用率 - 受压缩影响
  • 上下文切换
  • 你在互换吗?

有些工具可以帮助您回答这些问题,其中一些 特定于Cassandra和其他一般系统性能工具。看看吧 Cassandra记录GC暂停和丢弃的请求。看看nodetool cfstats 查看延迟统计数据。使用nodetool cfhistograms检查延迟分布, 每次读取的sstables数量和行大小分布。使用nodetool tpstats 检查已删除的请求和队列大小。

您还可以使用iostatvmstat等工具查看磁盘和系统利用率统计信息。