cassandra - Cassandra 中的批量限制是多少?

标签 cassandra cassandra-3.0 cassandra-2.2

我有一个 Java 客户端,可以将记录批量推送(插入)到 Cassandra 集群。批处理中的元素都具有相同的行键,因此它们都将被放置在同一个节点中。另外,我不需要事务是原子的,因此我一直在使用未记录的批处理。

每批中的 INSERT 命令数量取决于不同的因素,但可以是 5 到 50000 之间的任何值。首先,我只是在一批中放入尽可能多的命令并提交。这引发了com.datastax.driver.core.exceptions.InvalidQueryException:批处理太大。然后我使用每批 1000 个 INSERT 的上限,然后降至 300。我注意到我只是随机猜测,而不知道这个限制到底来自哪里,这可能会在以后造成麻烦。

我的问题是,这个限制是多少?我可以修改它吗?我如何知道一个批处理可以放置多少个元素?当我的批处理“满”时?

最佳答案

我建议不要增加上限,而只是分成多个请求。将所有内容都放在一个巨大的单个请求中将对协调器产生重大负面影响。将所有内容放在一个分区中可以通过减少一些延迟来提高某些大小批处理的吞吐量,但批处理绝不意味着用于提高性能。因此,尝试通过使用不同的批量大小来优化以获得最大吞吐量将在很大程度上取决于用例/架构/节点,并且需要特定的测试,因为通常在大小上存在一个悬崖,它开始退化。

有一个

# Fail any batch exceeding this value. 50kb (10x warn threshold) by default.
batch_size_fail_threshold_in_kb: 50

您的 cassandra.yaml 中的选项可以增加它,但一定要进行测试以确保您确实有助于而不是损害您的吞吐量。

关于cassandra - Cassandra 中的批量限制是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34699841/

相关文章:

performance - Datastax cassandra 存在性能问题

java - Cassandra 由于 Windows 10 上的访问冲突异常而失败

cassandra - 高 native 传输请求始终被阻止

mysql - 如何使用 cassandra 中另一个表的选择插入到 cassandra 表中?

cassandra - 执行 CQL 更新语句时更新整行的 TTL

python - 当 RF = 2 时 Cassandra 在所有节点上复制数据

python - 关于注册表中不存在的连接名称的 CQL 引擎异常

cassandra - 如何在Cassandra中实现触发器?

java - Cassandra 集群性能不佳