2015-04-01 16 views
6

C'è un modo per controllare la dimensione massima di un SSTable, ad esempio 100 MB in modo che quando ci sono più di 100 MB di dati per un CF, quindi Cassandra crea il prossimo SSTable?Cassandra control SSTable size

risposta

6

Sfortunatamente la risposta non è così semplice, le dimensioni dei tuoi SST possono essere influenzate dalla strategia di compattazione e non esiste un modo diretto per controllare la tua dimensione massima.

Gli SST vengono creati inizialmente quando i memoble vengono scaricati su disco come SST. Le dimensioni di queste tabelle dipendono inizialmente dalle impostazioni dei meme e dalla dimensione dell'heap (memtable_total_space_in_mb è un influencer di grandi dimensioni). In genere questi SST sono piuttosto piccoli. Gli SST possono essere uniti insieme come parte di un processo chiamato compaction.

Se si utilizza la strategia di compattazione a livelli, è possibile avere file SST molto grandi. STCS combina SSTables in un compattamento minore quando almeno uno sstables min_threshold (predefinito 4) della stessa dimensione li combina in un unico file, i dati in scadenza e le chiavi di unione. Questo ha la possibilità di creare SSTables molto grandi dopo un po '.

Utilizzando la strategia di compattazione livellata esiste un'opzione sstable_size_in_mb che controlla una dimensione di destinazione per gli SST. In generale, gli SST possono essere inferiori o uguali a questa dimensione, a meno che non si disponga di una chiave di partizione con molti dati ("righe larghe").

Non ho ancora sperimentato molto con la strategia di compattazione a livello di data, ma funziona in modo simile a STCS in quanto unisce file della stessa dimensione, ma mantiene i dati insieme in ordine temporale e ha una configurazione per fermare la compattazione vecchi dati (max_sstable_age_days) che potrebbero essere interessanti.

La chiave è trovare la strategia di compattazione che funzioni meglio per i dati e quindi ottimizzare le proprietà attorno a ciò che funziona meglio per il modello/ambiente dati.

È possibile leggere ulteriori informazioni sulle impostazioni di configurazione per il compattazione here e leggere this guide per capire se STCS o LCS sono appropriati per l'utente.

+0

Dovrebbe inoltre aggiungere: C'è un mezzo felice quando si tratta di dimensioni SSTable, non vuoi che i tuoi SST sia troppo piccoli, in quanto crea un sacco di letture per ottenere i dati in quanto rende più probabile per righe da distribuire tra gli SST. Quanto grande dovrebbe essere accettabile il tuo sstables può dipendere dal vostro ambiente e le vostre esigenze, quindi è probabilmente bene sintonizzare e testare ciò che funziona meglio per voi. –

+0

Grazie per le informazioni. Dove posso specificare 'sstable_size_in_mb'? Ho provato a metterlo come 'sstable_size_in_mb: 40' nella conf/cassandra.yaml ma l'avvio di cassandra non è riuscito con l'errore org.apache.cassandra.exceptions.ConfigurationException: yaml non valido. Rimuovi proprietà [sstable_size_in_mb] dal tuo cassandra.yaml – RRM

+1

@RRMadhav, è probabile che la tua tabella stia ancora utilizzando SizeTieredCompactionStrategy. Questa opzione è supportata solo con LeveledCompactionStrategy, è possibile modificare la strategia di compattazione con il seguente comando CQL: ALTER TABLE tablename WITH compaction = {'class': 'LeveledCompactionStrategy', 'sstable_size_in_mb': 40}. Ti consiglio di utilizzare la dimensione predefinita sstable di 160 MB poiché questo è ciò che il team Cassandra ha trovato più ideale e parlando per esperienza, avendo un sacco di piccoli SSTables non è buono per le prestazioni di lettura. –