Ich habe einen Java-Client, der Datensätze (INSERT) im Stapel in Cassandra-Cluster schiebt. Die Elemente im Stapel haben alle denselben Zeilenschlüssel, sodass sie alle im selben Knoten platziert werden. Außerdem brauche ich die Transaktion nicht atomar, also habe ich ungeplant Batch verwendet.Was ist das Batch-Limit in Cassandra?
Die Anzahl der INSERT-Befehle in jedem Stapel hängt von verschiedenen Faktoren ab, kann aber zwischen 5 und 50000 liegen. Zuerst habe ich so viele Befehle wie in einem Batch eingegeben und übergeben. Dies warf com.datastax.driver.core.exceptions.InvalidQueryException: Batch too large
. Dann verwendete ich eine Kappe von 1000 INSERT pro Batch und dann bis zu 300. Ich bemerkte, dass ich nur zufällig rate, ohne genau zu wissen, woher diese Grenze kommt, die Probleme auf der Straße verursachen kann.
Meine Frage ist, was ist das Limit? Kann ich es ändern? Wie kann ich wissen, wie viele Elemente in einem Stapel platziert werden können? Wann ist meine Charge "voll"?
Das ist, was ich für dank suchen. Wissen Sie, wie Sie die Größe des Stapels im Client am besten überwachen können? –
Abhängig von der Treiber, den Sie verwenden, aber in der Java-Treiber können Sie getValues () auf jede einzelne Anweisung in Batch verwendet werden, die ein Array von ByteBuffers zurückgibt, für die Sie die verbleibende() -Methode verwenden, können die Größe zu erhalten die Puffer einzeln und summieren sie alle zusammen, aber generell würde ich das nicht empfehlen. Sie sollten erschaffen super große Chargen nicht, gerade groß genug, wo man das Gefühl, dass Sie nicht einmal annähernd nahe an dieser Grenze. –
gut gibt es paar Dinge hier. C * predigt Design durch Spalte anstelle von Zeilen und C * sagt 2B Spalten pro Partition aber empirisch wissen wir, die Sweet-Spot 100MB ist.Also selbst mit 100MB Partition und wenn die Standardgröße eines Stapels 50KB ist, ist das wie 100MB/50KB = 3125 Anfragen, um eine 100MB Partition abzurufen, also viel zu viele Anfragen. – user1870400