gpt4 book ai didi

cassandra - Cassandra 中批处理语句的替代方案,用于原子操作以避免性能影响

转载 作者:行者123 更新时间:2023-12-02 23:04:16 25 4
gpt4 key购买 nike

我们有一个使用 Cassandra 作为数据存储的应用程序。为了方便访问,相同的数据需要存储在具有不同分区键的多个表中。为了将数据存储到多个表中,使用了 BatchStatements。使用批处理语句的原因是为了确保数据写入全部或不写入。

通过此设置,最近由于用户群的增加,我们开始看到大量写入超时错误。我们发现许多博客和文章都提到 BatchStatements 被错误地用于存储多个分区。

引用文献:

其原因似乎是协调器节点负载过大,进而导致延迟。可以选择将 cassandra.yaml 中的 write_request_timeout_in_ms 增加到高于默认值 5 秒的值。我们尝试了此操作,但请求仍然失败。因此,我们更新了此设置,现在使用executeAsync。这样,WriteTimeout 异常就完全消失了。

但现在的问题是 - 我们如何处理原子性?以下是更新为使用executeAsync 的代码。使用executeAsync 是使用批处理语句的正确替代方法吗?有什么方法可以在异常 block 中处理回滚吗?

try {
for (ListenableFuture<ResultSet> futureItem : futureItems) {
futureItem.get();
}
} catch (Exception e) {
// need to handle rollback ?
}

最佳答案

最终,您所要求的东西在设计上并不存在。

  • 对于写入的原子性,您找到了批处理的解决方案。对于写入的替代原子性,最终是不存在的。

  • 对于数据的硬一致性 - 包括写入和读取,您可以设置写入和读取的一致性级别以确保硬一致性(WC:Local_Quorum,RC:Local_Quorum)

许多新用户/开发团队经常尝试在 Cassandra 上强制使用关系类型规则,但随着时间的推移,他们对 Cassandra 的使用通常会对其设计产生信心,从而实现可调一致性、减少停机时间和可扩展性。

关于cassandra - Cassandra 中批处理语句的替代方案,用于原子操作以避免性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60360905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com