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"?
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.
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)
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