【问题标题】:synchronous vs asynchronous write/delete in CassandraCassandra 中的同步与异步写入/删除
【发布时间】:2016-02-03 11:36:44
【问题描述】:

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

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

【问题讨论】:

  • 在阅读批次之前,请先阅读它们。批处理不会提高性能

标签: cassandra datastax


【解决方案1】:

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

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

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

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

参考 - performance evaluation using async writes

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 2014-04-18
        • 2015-02-23
        • 2012-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多