Quelle est la limite de lots dans Cassandra?

j'ai un client Java qui pousse les enregistrements (INSERT) en Lot vers Cassandra cluster. Les éléments du lot ont tous la même clé de ligne, donc ils seront tous placés dans le même noeud. De plus, je n'ai pas besoin que la transaction soit atomique, donc j'ai utilisé un lot non enregistré.

le nombre de commandes INSERT dans chaque lot dépend de différents facteurs, mais peut être n'importe quoi entre 5 et 50000. D'abord j'ai juste mis autant de commandes que j'avais dans un lot et l'ai soumis. Ce jeté com.datastax.driver.core.exceptions.InvalidQueryException: Batch too large. Puis j'ai utilisé un capuchon de 1000 INSERT par lot, puis à 300. J'ai remarqué que je devine juste au hasard sans savoir exactement d'où vient cette limite, ce qui peut causer des problèmes plus tard.

Ma question est, quelle est cette limite? Puis-je la modifier? Comment puis-je savoir combien d'éléments peuvent être placés dans un lot? Quand mon lot est "plein"?

20
demandé sur Alexis Wilke 2016-01-10 01:49:47

3 réponses

je recommande de ne pas augmenter le cap, et de simplement se diviser en plusieurs requêtes. Le fait de placer tout dans une demande unique aura une incidence négative importante sur le coordonnateur. Avoir tout dans une partition peut améliorer le débit dans certains lots de taille en réduisant une certaine latence, mais les lots ne sont jamais destinés à être utilisés pour améliorer les performances. Donc, essayer d'optimiser pour obtenir le débit maximum en utilisant différentes tailles de lots dépendra en grande partie de cas d'utilisation / schéma / noeuds et nécessitent des tests spécifiques, car il ya généralement une falaise sur la taille où il commence à se dégrader.

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

option dans votre cassandra.yaml pour l'augmenter, mais assurez-vous de tester pour s'assurer que vous aidez réellement et ne pas blesser vous êtes débit.

24
répondu Chris Lohfink 2016-04-18 08:23:35

en regardant les troncs de Cassandra, vous pourrez voir des choses comme:

erreur 19: 54: 13 Le Lot de [matches] est de taille 103.072 KiB, dépassant le seuil spécifié de 50.000 KiB par 53.072 KiB. (voir batch_size_fail_threshold_in_kb)

4
répondu fivetwentysix 2017-01-18 19:55:34

j'ai corrigé ce problème en changeant le CHUNKSIZE à une valeur plus basse (par exemple 1) https://docs.datastax.com/en/cql/3.1/cql/cql_reference/copy_r.html

COPY mytable FROM 'mybackup' WITH CHUNKSIZE = 1;

l'opération est beaucoup plus lente mais au moins cela fonctionne maintenant

2
répondu Etienne Cha 2016-10-26 08:53:36