Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Cassandra中获得可靠的插入时间?_C#_Cassandra - Fatal编程技术网

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

C# 如何在Cassandra中获得可靠的插入时间?,c#,cassandra,C#,Cassandra,我目前正在使用CassandraSharp用3个节点对Cassandra进行基准测试。 我主要关心的是延迟而不是吞吐量,所以经过一点GC调优后,这里是我的数字(在100000 k插入上,单线程): 国际热核实验堆/秒:1600 平均值:600µs 95分:600微秒 99分:5000微秒 最大值:50000µs 我这里的问题是,偶尔我会得到一个“糟糕”的延迟(50ms),我的目标是保持一致的延迟,即使以更高的平均值为代价 我相信这是由GC引起的,我想知道它是否可以避免 (作为旁注,向一个节点

我目前正在使用CassandraSharp用3个节点对Cassandra进行基准测试。 我主要关心的是延迟而不是吞吐量,所以经过一点GC调优后,这里是我的数字(在100000 k插入上,单线程):

  • 国际热核实验堆/秒:1600
  • 平均值:600µs
  • 95分:600微秒
  • 99分:5000微秒
  • 最大值:50000µs
我这里的问题是,偶尔我会得到一个“糟糕”的延迟(50ms),我的目标是保持一致的延迟,即使以更高的平均值为代价

我相信这是由GC引起的,我想知道它是否可以避免


(作为旁注,向一个节点发送大量插入并让它处理是一种好做法,还是我应该在客户端“负载平衡”它?

我不认为您能够偶尔摆脱糟糕的延迟问题。它很可能是您提到的GC,或者在它从Memtables执行磁盘刷新时

50ms的错误插入真的是个问题吗?Cassandra支持批处理变异器,允许您在一个长变异器中对插入操作进行排队,然后在以后执行批处理插入,这样您的主线程就不需要被同步插入阻塞,而同步插入可能需要比预期更长的时间。我没有使用CassandarSharp,所以不知道它是否公开了这个功能


此外,跨cassandra节点的负载平衡将略微缩短导入时间,但请记住,幕后的情况是,您提供导入的节点将把它交给正确的节点来执行存储(因此,您提供给它的节点实际上充当代理)因此,我无法想象在一般的edge案例中会有多大的改进。如果由于某种原因,节点开始执行其他操作,并且其性能受到影响,那么它将对您有所帮助。

如果您对可靠的插入时间感兴趣,您可能需要查看Cassandra的Acunu发行版,它在插入时提供了100倍的稳定延迟:(请特别注意第二张图片).

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

(除非磁盘速度太慢,无法跟上插入卷的速度,否则刷新不会阻止插入,这是不寻常的,因为刷新是顺序i/o。)


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

请注意,由于cassandra 1.0中引入了memtables的arena分配,该基准已经过时,这消除了这里看到的世界老一代gc暂停的那种停止。(详情:)我已经经历了gcoptim阶段,并且有最小的年轻一代空间来加快GC时间。所以我想不会比这更好了:/你能告诉我们你是如何调整GC的吗?谢谢