Cassandra

时间:2015-11-03 10:42:06

标签: cassandra datastax

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

如果我使用executeAsynchronously()代替execute()CqlOperation类(datastax驱动程序)的方法,它会改善吞吐量(TPS)方面的性能吗?在我的应用程序中,我正在进行单个插入/删除以及批量插入。 直到现在我只使用execute方法(同步),我正在考虑使用异步执行来提高应用程序在TPS方面的性能。

3 个答案:

答案 0 :(得分:1)

肯定会提高性能。 我没有尝试过,但下面的链接说的相同 Read the question

http://www.datastax.com/dev/blog/java-driver-async-queries

答案 1 :(得分:1)

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

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

在某些情况下,同步查询可能更合适,尤其是在继续执行程序之前查询结果是关键的。但在大多数情况下,Async就足够了。

简而言之,您的问题的答案是肯定的 - 我已经测试了 TPS增加4倍

参考 - performance evaluation using async writes

答案 2 :(得分:0)

同步写入(或删除)到cassandra将阻止代码执行,直到客户端根据一致性级别收到操作已完成的确认。

另一方面,异步写(或删除)会将查询发送到cassandra,然后继续执行代码(不会阻塞)。现在你必须注册某种回调,它会(异步地)通知你写操作已经完成。

所有阻止都会增加,并且会降低您的应用程序速度。由于异步查询会立即继续,因此它们允许您在之后发送更多异步查询,而不是等待第一个查询完成。这是性能提升的地方,特别是如果你向cassandra发送大量查询。