Ho un client Java che spinge (INSERIRE) i record in batch sul cluster Cassandra. Gli elementi nel batch hanno tutti la stessa chiave di riga, quindi saranno tutti posizionati nello stesso nodo. Inoltre non ho bisogno che la transazione sia atomica, quindi ho usato batch non loggato.Qual è il limite di batch in Cassandra?
Il numero di comandi INSERT in ogni batch dipende da diversi fattori, ma può essere compreso tra 5 e 50000. Prima ho inserito tutti i comandi che avevo in un batch e l'ho inviato. Questo ha gettato com.datastax.driver.core.exceptions.InvalidQueryException: Batch too large
. Poi ho usato un tappo di 1000 INSERT per batch e poi giù a 300. Ho notato che sto solo indovinando casualmente senza sapere esattamente da dove viene questo limite, che può causare problemi lungo la strada.
La mia domanda è, qual è questo limite? Posso modificarlo? Come posso sapere quanti elementi possono essere inseriti in un lotto? Quando il mio batch è "pieno"?
Questo è quello che stavo cercando, grazie. Sai qual è il modo migliore per monitorare le dimensioni del batch nel client? –
Dipende dal driver che si sta utilizzando, ma nel driver java è possibile utilizzare getValues () su ogni singola istruzione nel batch che restituisce una matrice di ByteBuffers per cui è possibile utilizzare il metodo rimanente() per ottenere la dimensione di i buffer individualmente e li sommano tutti, ma in generale non consiglierei di farlo. Non dovresti creare lotti super grandi, ma abbastanza grandi da farti sentire che non sei neanche lontanamente vicino a quel limite. –
bene ci sono un sacco di cose qui. C * predica il design per colonna invece di righe e C * dice colonne 2B per partizione ma sappiamo empiricamente che il punto ottimale è 100 MB.quindi anche con una partizione da 100 MB e se la dimensione predefinita di un batch è 50 KB che è come 100 MB/50 KB = 3125 richieste per recuperare una partizione da 100 MB in modo da troppe richieste. – user1870400