Was ist ein SSTable?

Antworten:

105

Sorted Strings Table (von Google ausgeliehen) ist eine Datei mit Schlüssel / Wert-Zeichenfolgenpaaren, sortiert nach Schlüsseln

Schildmeijer
quelle
4
Vielen Dank für eine weitere hervorragende Antwort von SO Cassandra! Übrigens, haben Sie diese Frage gesehen: stackoverflow.com/questions/2573106/…
knorv
Ist es im Allgemeinen unveränderlich?
Dean J
1
Ja, Sstables sind von Natur aus unveränderlich - was eine großartige Funktion ist
Schildmeijer
Wie kann es dann sowohl sortiert als auch unveränderlich sein?
28.
56

"Eine SSTable bietet eine dauerhafte, geordnete unveränderliche Zuordnung von Schlüsseln zu Werten, wobei sowohl Schlüssel als auch Werte beliebige Byte-Zeichenfolgen sind. Es werden Operationen bereitgestellt, um den einem angegebenen Schlüssel zugeordneten Wert nachzuschlagen und alle Schlüssel / Wert-Paare in a zu durchlaufen Angegebener Schlüsselbereich. Intern enthält jede SSTable eine Folge von Blöcken (normalerweise ist jeder Block 64 KB groß, aber konfigurierbar). Ein Blockindex (am Ende der SSTable gespeichert) wird zum Auffinden von Blöcken verwendet. Der Index wird geladen in den Speicher, wenn die SSTable geöffnet wird. Eine Suche kann mit einer einzelnen Festplattensuche durchgeführt werden: Wir finden zuerst den entsprechenden Block, indem wir eine binäre Suche im In-Memory-Index durchführen und dann den entsprechenden Block von der Festplatte lesen. Optional eine SSTable kann vollständig in den Speicher abgebildet werden, wodurch wir Lookups und Scans durchführen können, ohne die Festplatte zu berühren.""

zhouchonghz AT gmail.com
quelle
4
"ohne die Festplatte zu berühren" -> "ohne zu wissen, dass die Festplatte berührt wird". Speicherzugeordnete E / A-Vorgänge sind eine sehr praktische Methode, da sie die eigentlichen E / A an das Betriebssystem delegieren, vorausgesetzt, sie können beim Caching gute Arbeit leisten (insbesondere, wenn mehrere Prozesse dieselbe Datei gemeinsam nutzen). Aber es hat den Nachteil, dass Sie keine Kontrolle darüber haben. Wenn sich die Seite nicht im Speicher befindet, blockiert der Thread und kann keine anderen Vorgänge ausführen. Vergleichen Sie es mit "async IO", wo Sie einen Rückruf registrieren und andere Aufgaben im selben Thread ausführen können, während die E / A ansteht.
Ithkuil
2
@ithkuil: Sie können die E / A-Zuordnung des Speichers absolut kontrollieren, zumindest bis Sie sicherstellen können, dass sich bestimmte Seiten im Speicher befinden oder auf der Festplatte festgeschrieben wurden (es gibt immer noch Spielraum für Seiten, deren Speicherung nicht garantiert ist Erinnerung könnte aber sehr gut sein). Darum geht es bei wundersamen Dingen wie mlock (), msync () und MAP_LOCKED. Sie können auch durch mincore () verstehen, was aktuell ist und was nicht.
Christopher Smith
2
@ChristopherSmith: Ja, Sie haben Recht, es gibt Möglichkeiten, dies zu kontrollieren. Normalerweise wird es jedoch für kritische Leistungsabschnitte (Echtzeit) oder sicherheitsrelevante Probleme verwendet (z. B. um zu vermeiden, dass ein In-Memory-Kennwort auf der Festplatte ausgetauscht wird). Speicherzugeordnete Dateien sind genau deshalb sehr nützlich, weil Sie nicht entscheiden müssen, wie viele davon im Speicher bleiben sollen. Andernfalls könnten Sie einfach die gesamte Datei im Speicher ohne mmap lesen und den gleichen Effekt erzielen. Tatsächlich habe ich gerade den Cassandra-Code durchgesehen; Der einzige Aufruf mlockall(MCL_CURRENT);erfolgt beim Start. Siehe auch: goo.gl/AEgPM
ithkuil
4
Das obige Zitat stammt aus dem BigTable-Papier .
ShreevatsaR
4

Ein Tablet wird in Form von SSTables gespeichert.

SSTable (direkt GFS zugeordnet) ist ein auf Schlüsselwerten basierender unveränderlicher Speicher. Es speichert Datenblöcke mit jeweils 64 KB.

Definitionen:

  • Index der Schlüssel: Schlüssel und Startort
  • Chunk ist eine Speichereinheit in GFS, die Replikatverwaltung erfolgt nach Chunk
Manjit Singh
quelle
3
  • SSTable (engl. Sorted Strings Table) ist eine Datei mit Schlüssel / Wert-Zeichenfolgenpaaren, sortiert nach Schlüsseln.

  • Eine SSTable bietet eine dauerhafte, geordnete unveränderliche Zuordnung von Schlüsseln zu Werten, wobei sowohl Schlüssel als auch Werte beliebige Bytezeichenfolgen sind.

  • Intern enthält jede SSTable eine Folge von Blöcken (normalerweise ist
    jeder Block 64 KB groß, dies ist jedoch konfigurierbar).

miksiii
quelle