【发布时间】:2016-04-29 04:56:37
【问题描述】:
阻止来自 com.datastax.driver.core.Session 的执行方法
public ResultSet execute(Statement statement);
对此方法的评论:
此方法会阻塞,直到至少收到一些结果 数据库。但是,对于 SELECT 查询,它不保证 结果已全部收到。但它确实保证了一些 已从数据库收到响应,特别是 保证如果请求无效,将抛出异常 用这种方法。
来自 com.datastax.driver.core.Session 的非阻塞执行方法
public ResultSetFuture executeAsync(Statement statement);
此方法不会阻塞。查询完成后立即返回 传递到底层网络堆栈。特别是,从 此方法不保证查询有效或什至 已提交到活动节点。与失败有关的任何异常 访问 {@link 时将抛出查询 结果集未来}。
我有 02 个关于它们的问题,如果你能帮助我理解它们,那就太好了。
假设我有 100 万条记录,我希望所有记录都到达数据库(没有任何丢失)。
问题 1: 如果我有 n 个线程,所有线程将具有相同数量的记录,它们需要发送到数据库。他们都继续使用阻塞执行调用向 cassandra 发送多个插入查询。如果我增加 n 的值,是否也有助于加快我需要将所有记录插入到 cassandra 的时间?
这会导致 cassandra 出现性能问题吗? Cassandra 是否必须确保对于每条插入记录,集群中的所有节点都应该立即知道新记录?为了保持数据的一致性。 (我假设 cassandra 节点甚至不会考虑使用本地机器时间来控制记录插入时间)。
问题 2: 使用非阻塞执行,如何确保所有插入都成功?我知道的唯一方法是等待 ResultSetFuture 检查插入查询的执行。我有什么更好的方法吗?非阻塞执行比阻塞执行更容易失败吗?
非常感谢您的帮助。
【问题讨论】:
标签: cassandra datastax datastax-java-driver