J'ai un client Java qui pousse les enregistrements (INSERT) en batch vers le cluster Cassandra. Les éléments du lot ont tous la même clé de ligne, de sorte qu'ils seront tous placés dans le même noeud. Aussi, je n'ai pas besoin que la transaction soit atomique, donc j'ai utilisé un batch non-ouvert.Quelle est la limite de lot à Cassandra?
Le nombre de commandes INSERT dans chaque lot dépend de différents facteurs, mais peut être compris entre 5 et 50000. Tout d'abord, je mets juste autant de commandes que j'avais dans un lot et je l'ai soumis. Cela a jeté com.datastax.driver.core.exceptions.InvalidQueryException: Batch too large
. Ensuite, j'ai utilisé une limite de 1000 INSERT par lot, puis jusqu'à 300. J'ai remarqué que je ne fais que deviner 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 le modifier? Comment puis-je savoir combien d'éléments peuvent être placés dans un lot? Quand mon lot est "plein"?
C'est ce que je cherchais, merci. Savez-vous quelle est la meilleure façon de surveiller la taille du lot dans le client? –
Dépend du pilote que vous utilisez, mais dans le pilote java, vous pouvez utiliser getValues () sur chaque instruction de votre batch qui vous renvoie un tableau de ByteBuffers pour lequel vous pouvez utiliser la méthode remaining() pour obtenir la taille de les tampons individuellement et les résumer tous, mais en général je ne recommanderais pas de le faire. Vous ne devriez pas créer de super gros lots, juste assez grands pour sentir que vous êtes loin de cette limite. –
Eh bien, il y a beaucoup de choses ici. C * prêche la conception par colonne au lieu de lignes et C * dit 2B colonnes par partition mais empiriquement nous savons que le point idéal est 100MB.donc même avec 100 Mo de partition et si la taille par défaut d'un lot est de 50 Ko c'est comme 100 Mo/50 Ko = 3125 demandes pour récupérer une partition de 100 Mo donc beaucoup trop de demandes. – user1870400