什么是卡桑德拉的批处理限制?

问题描述 投票:22回答:3

我有一个Java客户机,推(INSERT)记录在批卡桑德拉集群。该批次中的所有元素均具有相同的行键,所以他们都将被放置在同一个节点。此外,我不需要交易是原子的,所以我一直在使用未注册的批次。

在每个批次的INSERT命令的数目取决于不同的因素,但也可以是5至50000。首先,我只是把尽可能多的命令,我曾在一个批次,并提交任何东西。这扔com.datastax.driver.core.exceptions.InvalidQueryException: Batch too large。然后我用每批1000 INSERT的帽子,又回落到300。我注意到,我只是随机不知道猜测正是此限制的来源,这可能会导致麻烦的道路。

我的问题是,这是什么限制?我可以修改?我怎样才能知道有多少元素可以被放置在一个批次?当我的批处理是“满”?

cassandra cassandra-3.0 cassandra-2.2
3个回答
27
投票

我建议不增加的帽子,只是分成多个请求。在一个巨大的单个请求把一切都将产生负面协调显著影响。有一个分区都可以通过减少一些延迟改善某些规模批量的吞吐量,但从未想过批次被用于提高性能。因此,试图通过优化使用不同的批量大小将在很大程度上取决于使用案例/模式/节点,以获得最大的吞吐量,并需要具体的测试,因为一般有关于它开始降低大小悬崖。

有一个

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

cassandra.yaml选项来增加它,但一定要进行测试,以确保您的实际帮助,而不是伤害你的吞吐量。


5
投票

纵观卡桑德拉日志你能够发现喜欢的东西:

ERROR 19时54分13秒为批次[比赛]是大小103.072KiB的,由超过53.072KiB的50.000KiB指定阈值。 (见batch_size_fail_threshold_in_kb)


3
投票

我通过改变CHUNKSIZE到一个较低的值(对于为例1)https://docs.datastax.com/en/cql/3.1/cql/cql_reference/copy_r.html固定这个问题

COPY mytable的从与CHUNKSIZE = 1 '为MyBackup';

操作慢得多,但至少它现在的工作

© www.soinside.com 2019 - 2024. All rights reserved.