2015-11-03 68 views
0

Cassandra中的同步和异步写入/删除有什么区别?Cassandra中的同步和异步写入/删除

如果我使用executeAsynchronously()而不是​​方法CqlOperation类(datastax驱动程序)它会提高吞吐量(TPS)方面的性能吗?在我的应用程序中,我正在做单插入/删除以及批量插入。 到目前为止,我只使用execute方法(同步),我正在考虑使用异步执行来提高应用程序在TPS方面的性能。

+0

在读取批次之前,请阅读它们。批次不会提高性能 – jny

回答

0

同步写(或删除)卡珊德拉,直到客户端接收操作已根据已完成的确认将阻止执行代码一致性水平。另一方面,异步写(或删除)将查询发送到cassandra,然后继续执行代码(不会阻塞)。现在您必须注册某种回调,它会通知您(异步)写入操作已完成。

所有的阻塞加起来,可能会减慢你的应用程序。由于异步查询立即进行,它们允许您在发送后立即发送更多的异步查询,而不是等待第一个完成。这就是性能增加的地方,特别是当你向cassandra发送大量查询时。

1

异步写入为每个工作者提供更好的性能,但它增加了回调和错误处理的开销。

我最近做了一个测试,发现性能优势以及回调实现的错误处理,使用带有1M记录的单个工作人员写入异步发现速度是同步时间的4倍。 in_flight queries被限制为1000,这个数字可以根据环境条件进行相应的调整(您希望在网络上放置的连接数量,比如200毫秒的网络延迟和1毫秒的服务器响应时间,人们可以将200个查询放入in_flight中,而在这种情况下,同步呼叫会让服务器在200ms内有199ms的空闲时间,在这种情况下,服务器几乎会一直处理至少一个查询),但没有限制,它会使网络拥塞,并可能导致性能下降。

在某些情况下,同步查询可能更合适,特别是如果在继续执行程序之前查询的结果非常重要。但在大多数情况下,异步就足够了。

总之,您的问题的答案是肯定的 - 我已经测试TPS增加4x

参考 - performance evaluation using async writes