如何在Cassandra中获得可靠的插入时间?

alp*_*ema 5 c# cassandra

我目前正在使用CassandraSharp对3个节点的Cassandra进行基准测试.我主要担心的是延迟比吞吐量更多,所以经过一些GC调整后我的数字(在100 000K插入,单线程):

  • Iter/sec:1600
  • 平均值:600μs
  • 95分:600μs
  • 99分:5000μs
  • 最大值:50000μs

我的问题是,偶尔我会遇到"坏"延迟(50ms),我的目标是保持一致的延迟,即使以更高的平均值为代价.

我相信这是由GC造成的,我想知道是否可以避免.

(作为旁注,向一个节点发送大量插入并让它处理它或者我应该在客户端"负载均衡"它是一个好习惯吗?)

jbe*_*lis 2

50ms 在年轻代垃圾收集的正常范围内。您可以通过取消注释底部的相应行来启用 cassandra-env.sh 中的 GC 日志记录,以验证这是否是问题所在。

(刷新不会阻止插入,除非您的磁盘太慢而无法跟上插入量,这是不寻常的,因为刷新是顺序 I/O。)

如果年轻代集合确实与较高的延迟相关,您可以减少尝试使年轻代更小(也在 cassandra-env.sh 中配置),但可能会以延迟换取吞吐量为代价。