Asynchronous 异步cassandra查询

Asynchronous 异步cassandra查询,asynchronous,cassandra,cassandra-2.0,datastax-java-driver,Asynchronous,Cassandra,Cassandra 2.0,Datastax Java Driver,我一直在尝试更新一个应用程序以提高性能,它使用Datastax Cassandra Java驱动程序提供DAL服务 现在,我需要将同步查询转换为异步查询,对于我的疑问,我没有找到令人满意的答案(至少在我访问的网页上没有) 任何人都可以回答下面的问题或参考一个链接,我可以得到答案 1> 在将synced executes更改为ansync execs之前,我需要担心哪些可能的问题场景 2> 读和写的行为如何,我可以在不担心任何问题的情况下更改其中一个吗 提前谢谢 有几件事你需要考虑: 您需要对代

我一直在尝试更新一个应用程序以提高性能,它使用Datastax Cassandra Java驱动程序提供DAL服务

现在,我需要将同步查询转换为异步查询,对于我的疑问,我没有找到令人满意的答案(至少在我访问的网页上没有)

任何人都可以回答下面的问题或参考一个链接,我可以得到答案

1> 在将synced executes更改为ansync execs之前,我需要担心哪些可能的问题场景

2> 读和写的行为如何,我可以在不担心任何问题的情况下更改其中一个吗


提前谢谢

有几件事你需要考虑:

  • 您需要对代码进行分级限制-默认情况下,每个连接只有1024个请求,因此您可能需要这样做。但是,即使每个连接的请求数量增加,也很容易使Cassandra过载,因此您仍然需要使用以下方法来控制它:
  • 您需要正确地处理错误-您可能需要添加错误处理程序来保证返回的错误,并做出相应的反应
  • 您需要正确地创建语句-例如,不要重用相同的
    BoundStatement
    ,因为它不是线程安全的
  • 不要重复使用作为参数传递的相同列表/集/映射实例等

Asyn querys references:1)2)谢谢Alex,还有一件事,在批处理保持原子性的情况下,将批处理语句与executeAsync配对到底是如何工作的。我可以将它们结合起来,在不丢失原子性的情况下获得更好的性能吗?有不同类型的批处理—可以对多个表进行批处理,也可以对同一个表进行批处理,等等。如果对表内的同一分区进行批处理,那么比多次发送相同的查询要快得多。但除此之外,批处理与
executeAsync
的使用方式与
execute
的使用方式相同……太棒了!非常清楚,在我的例子中,批处理是针对多个表的,所以我认为使用executeAsync是无用的。为什么,它仍然有用,因为您仍然可以并行执行,而无需添加更多线程。但是您确实需要考虑批处理的使用——它们非常昂贵,并且应该只在有限数量的情况下使用。使用批处理可以确保事务的原子性。我编写的初始代码是以异步方式处理批处理。我有多个事务,每个事务都有一组upserts。因此,我尝试对每个批使用异步来获得更好的性能,而不是以同步的方式对每个批执行批处理。有道理,对吧?