レコードをバッチでプッシュ(INSERT)するJavaクライアントがCassandraクラスタにあります。バッチ内の要素はすべて同じ行キーを持つため、すべてが同じノードに配置されます。また、トランザクションをアトミックにする必要はないので、未記録のバッチを使用しています。カッサンドラのバッチ制限はどのくらいですか?
各バッチ内のINSERTコマンドの数は、さまざまな要因によって異なりますが、5〜50000の間の値にすることができます。まず、1つのバッチにある数のコマンドを入力して送信します。これはcom.datastax.driver.core.exceptions.InvalidQueryException: Batch too large
を投げた。次に、バッチごとに1000 INSERTのキャップを使用してから300に下がりました。私は、この限界がどこから来ているのかを突き止めるだけで無作為に推測していることに気付きました。
私の質問は、この制限は何ですか?それを変更することはできますか?どのように多くの要素をバッチに配置できるのかを知るにはどうすればよいですか?私のバッチが「満杯」になったら?
これは私が探していたものです。ありがとうございます。クライアントのバッチのサイズを監視する最良の方法は何ですか? –
使用しているドライバによって異なりますが、Javaドライバでは、バッチ内の個々のステートメントごとにgetValues()を使用して、残りの()メソッドを使用してサイズを取得できるByteBuffersの配列を返します。バッファーを個別にまとめ、それらを合計しますが、一般的にはそうすることをお勧めしません。あなたは超大規模なバッチを作成すべきではありません。それは、あなたがその限界に近づいていないと感じるところで十分です。 –
ここにはたくさんのものがあります。 C *は行の代わりに列で設計し、C *はパーティションあたり2Bの列を示しますが、経験的にはスイートスポットは100MBです。100MBのパーティションでも、バッチのデフォルトサイズが50KBであれば、100MB/50KB = 3125リクエストで100MBのパーティションを取得できます。 – user1870400