Cos'è un SSTable?


Risposte:


105

Sorted Strings Table (preso in prestito da google) è un file di coppie di stringhe chiave / valore, ordinate per chiavi


4
Grazie per l'ennesima eccellente risposta SO Cassandra! A proposito, hai visto questa domanda: stackoverflow.com/questions/2573106/...
knorv

È generalmente immutabile?
Dean J

1
sì, gli sstables sono immutabili in base alla progettazione - che è una caratteristica fantastica
Schildmeijer

Come può essere ordinato e immutabile allora?
xjcl

56

"Un SSTable fornisce una mappa persistente, ordinata e immutabile dalle chiavi ai valori, in cui sia le chiavi che i valori sono stringhe di byte arbitrarie. Vengono fornite operazioni per cercare il valore associato a una chiave specificata e per iterare su tutte le coppie chiave / valore in un intervallo di chiavi specificato. Internamente, ogni SSTable contiene una sequenza di blocchi (in genere ogni blocco ha una dimensione di 64 KB, ma è configurabile). Un indice di blocco (memorizzato alla fine di SSTable) viene utilizzato per individuare i blocchi; l'indice viene caricato in memoria quando viene aperto SSTable. È possibile eseguire una ricerca con una singola ricerca su disco: per prima cosa troviamo il blocco appropriato eseguendo una ricerca binaria nell'indice in memoria, quindi leggendo il blocco appropriato dal disco. Facoltativamente, un SSTable può essere completamente mappato in memoria, il che ci consente di eseguire ricerche e scansioni senza toccare il disco."


4
"senza toccare il disco" -> "senza accorgersi che il disco viene toccato". L'IO mappato in memoria è una tecnica molto utile perché delega l'IO effettivo al sistema operativo, supponendo che possa svolgere un buon lavoro di memorizzazione nella cache (specialmente quando diversi processi condividono lo stesso file). Ma ha lo svantaggio di non averne il controllo. Se la pagina non è residente in memoria, il thread si bloccherà e non potrà eseguire altre operazioni; confrontalo con "async IO", dove puoi registrare un callback e fare altre cose nello stesso thread, mentre l'IO è in sospeso.
ithkuil

2
@ithkuil: puoi assolutamente avere il controllo dell'IO mappato in memoria almeno al punto da essere in grado di assicurarti che alcune pagine siano in memoria o siano state salvate su disco (c'è ancora spazio per le pagine di cui non è garantita la presenza memoria ma potrebbe essere molto bene). Questo è ciò che riguardano cose meravigliose come mlock (), msync () e MAP_LOCKED. È inoltre possibile ottenere una comprensione di ciò che è attualmente e non è impaginato tramite mincore ().
Christopher Smith

2
@ChristopherSmith: sì, hai ragione, ci sono modi per controllarlo. Tuttavia, di solito viene utilizzato per sezioni di prestazioni critiche (in tempo reale) o problemi relativi alla sicurezza (come evitare che una password in memoria venga scambiata su disco). I file mappati in memoria sono molto utili proprio per il fatto che non devi decidere quanto di essi tenere in memoria; altrimenti potresti semplicemente leggere l'intero file in memoria senza mmap e ottenere lo stesso effetto. In effetti, ho appena sfogliato il codice cassandra; l'unica chiamata viene mlockall(MCL_CURRENT);eseguita all'avvio. Vedi anche: goo.gl/AEgPM
ithkuil

4
La citazione sopra è tratta dal documento BigTable .
ShreevatsaR

4

Un tablet viene memorizzato sotto forma di SSTables.

SSTable (mappato direttamente a GFS) è uno storage immutabile basato su valori-chiave. Memorizza blocchi di dati, ciascuno di 64 KB.

definizioni:

  • Indice delle chiavi: chiave e posizione di partenza
  • Chunk è un'unità di archiviazione in GFS, la gestione delle repliche è per blocco

3
  • SSTable (engl. Sorted Strings Table) è un file di coppie di stringhe chiave / valore, ordinate per chiavi.

  • Un SSTable fornisce una mappa persistente, ordinata e immutabile dalle chiavi ai valori, in cui sia le chiavi che i valori sono stringhe di byte arbitrarie.

  • Internamente, ogni SSTable contiene una sequenza di blocchi (in genere
    ogni blocco ha una dimensione di 64 KB, ma è configurabile).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.