Inhaltsverzeichnis:
Video: Azure Friday | Azure Cosmos DB: Get the Most Out of Provisioned Throughput 2024
Das Wort partition wird für zwei unterschiedliche Konzepte in NoSQL land verwendet. Eine Datenpartition ist ein Mechanismus zum Sicherstellen, dass Daten gleichmäßig über einen Cluster verteilt sind. Auf der anderen Seite tritt eine Netzwerkpartition auf, wenn zwei Teile desselben Datenbankclusters nicht miteinander kommunizieren können.
Bei sehr großen Clustersystemen wird es immer wahrscheinlicher, dass ein Ausfall eines Geräts auftritt. Wenn ein Netzwerkwechsel zwischen Servern in einem Cluster fehlschlägt, tritt ein als (im Computerjargon) bezeichnetes Phänomen split brain auf. In diesem Fall empfangen einzelne Server weiterhin Anforderungen, können jedoch nicht miteinander kommunizieren.
Dieses Szenario kann zu Dateninkonsistenzen oder einfach zu einer reduzierten Kapazität bei der Datenspeicherung führen, da die Netzwerkpartition mit den wenigsten Servern aus dem Cluster entfernt wird (oder in wahrer Big-Brother-Weise "abgewählt" wird).).
Tolerierende Partitionen
Sie haben zwei Möglichkeiten, wenn eine Netzwerkpartition auftritt:
-
Fahren Sie auf einer bestimmten Ebene mit Lese- und Schreiboperationen fort.
-
Wählen Sie einen Teil der Partition aus und beschließen Sie, die Daten später zu korrigieren, wenn beide Teile miteinander kommunizieren können. In der Regel wählt der Cluster für jeden fehlenden Master-Partitionsknoten ein Lese-Replikat als neuen Master aus.
Mit Riak können Sie bestimmen, wie oft Daten repliziert werden (standardmäßig drei Kopien - also n = 3) und wie viele Server abgefragt werden müssen, damit ein Lesevorgang erfolgreich ist. Dies bedeutet, dass, wenn sich der primäre Master eines Schlüssels auf der falschen Seite einer Netzwerkpartition befindet, Lesevorgänge weiterhin erfolgreich ausgeführt werden können, wenn die anderen beiden Server verfügbar sind (d. H. R = 2 Lesezugriff).
Riak verarbeitet Schreibvorgänge, wenn der Primärpartitionsserver heruntergefahren wird, indem er ein System verwendet, das angedeutete Übergabe heißt. Wenn Daten ursprünglich repliziert werden, wird der erste Knoten für eine bestimmte Schlüsselpartition zusammen mit (standardmäßig) zwei der folgenden Nachbarknoten geschrieben.
Wenn der primäre Knoten nicht beschrieben werden kann, wird in den nächsten Knoten im Ring geschrieben. Diese Schreibvorgänge werden effektiv an den nächsten Knoten übergeben. Wenn der primäre Server zurückkehrt, werden die Schreibvorgänge an diesen Knoten wiederholt, bevor er die primären Schreibvorgänge wieder übernimmt.
Bei diesen beiden Vorgängen können Inkonsistenzen bei der Versionsverwaltung auftreten, weil sich verschiedene Replikate in unterschiedlichen Versionszuständen befinden können, selbst wenn dies nur für ein paar Millisekunden der Fall ist.
Riak verwendet noch ein anderes System namens aktive Anti - Entropie , um dieses Problem zu lindern. Dieses System durchsucht aktualisierte Werte und stellt sicher, dass die Repliken irgendwann aktualisiert werden, vorzugsweise früher als später.Dadurch werden Konflikte beim Lesen vermieden, während eine hohe Aufnahmedauer beibehalten wird, wodurch ein zweiphasiges Commit vermieden wird, das von anderen NoSQL-Datenbanken mit Master-Slave-, Shared-Nothing-Clusterunterstützung verwendet wird.
Wenn ein Konflikt beim Lesen auftritt, verwendet Riak read repair , um zu versuchen, nur die neuesten Daten zurückzugeben. Letztendlich kann die Client-Anwendung jedoch in Abhängigkeit von den von Ihnen verwendeten Konsistenz- und Verfügbarkeitseinstellungen mit mehreren Versionen präsentiert und aufgefordert werden, selbst zu entscheiden.
In einigen Situationen ist dieser Kompromiss wünschenswert, und viele Anwendungen können auf der Grundlage der präsentierten Daten intuitiv wissen, welche Version zu verwenden ist und welche Version zu verwerfen ist.
Sekundäre Indizierung
Sekundäre Indizes sind Indizes für bestimmte Daten innerhalb eines Werts. Die meisten Schlüsselwertspeicher überlassen diese Indizierung der Anwendung. Jedoch ist Riak anders und verwendet ein Schema, das Dokument - basierte Partitionierung genannt wird, das eine sekundäre Indexierung ermöglicht.
Die dokumentbasierte Partitionierung setzt voraus, dass Sie JSON-Strukturen in die Riak-Datenbank schreiben. Sie können dann Indizes für bestimmte benannte Eigenschaften innerhalb dieser JSON-Struktur einrichten (siehe Abbildung):
{"Auftrags-ID": 5001, "Kunden-ID": 1429857, "Auftragsdatum": "2014-09-24 "," Total ": 134. 24}
Wenn Sie eine Anwendung haben, die die Bestellungen eines Kunden für den vorherigen Monat anzeigt, dann möchten Sie alle Datensätze wie gezeigt abfragen, wobei die Kunden-ID ein fester Wert ist (1429857) und das Bestelldatum liegt innerhalb eines bestimmten Bereichs (Anfang und Ende des Monats).
In den meisten Schlüsselwertspeichern erstellen Sie einen anderen Bucket, dessen Schlüssel die kombinierte Kundennummer und der Monat ist. Der Wert ist eine Liste mit Bestellungs-IDs. In Riak fügen Sie jedoch einfach einen sekundären Index sowohl für die Kunden-ID (Ganzzahl) als auch für das Bestelldatum (Datum) hinzu, was zusätzlichen Speicherplatz beansprucht, aber den Vorteil hat, für den Anwendungsentwickler transparent zu sein.
Diese Indizes werden auch live aktualisiert - das bedeutet, dass es keine Verzögerung zwischen der Aktualisierung eines Dokumentwerts in Riak und der Aktualisierung der Indizes gibt. Dieser Live-Zugriff auf Daten ist schwieriger als es scheint. Wenn die Indizes inkonsistent sind, werden Sie niemals die konsistent gehaltenen Daten finden!
Evaluierung von Riak
Basho, die kommerzielle Entität hinter Riak, sagt, dass seine kommende NoSQL-Datenbank der Version 2. 0 immer eine starke Konsistenz hat, eine Behauptung, die andere NoSQL-Anbieter machen. Die Behauptung von NoSQL-Anbietern, immer eine starke Konsistenz zu haben, ist wie der Anspruch, ein starker Vegetarier zu sein … außer sonntags, wenn Sie Roastbeef haben.
Riak ist keine ACID-konforme Datenbank. Ihre Konfiguration kann nicht so geändert werden, dass sie im ACID-Compliance-Modus ausgeführt wird. Clients können während des normalen Betriebs oder während der Netzwerkpartitionen inkonsistente Daten erhalten. Riak handelt mit absoluter Konsistenz für erhöhte Verfügbarkeit und Partitionstoleranz.
Das Ausführen von Riak im Modus für starke Konsistenz bedeutet, dass seine Lesereplikate gleichzeitig mit dem primären Master aktualisiert werden. Dies beinhaltet eine zweiphasige Festschreibung - im Grunde genommen schreibt der Hauptknoten in die anderen Knoten, bevor er bestätigt, dass der Schreibvorgang abgeschlossen ist.
Zum Zeitpunkt dieses Schreibens unterstützt Riaks starker Konsistenzmodus keine sekundären Indizes oder komplexen Datentypen (zum Beispiel JSON). Hoffentlich wird Basho dieses Problem in zukünftigen Versionen der Datenbank beheben.
Riak Search (eine umbenannte und integrierte Suchmaschine von Apache Solr verwendet ein eventuell konsistentes Update-Modell) kann bei Verwendung starker Konsistenz zu falschen Ergebnissen führen. Diese Situation tritt auf, weil möglicherweise Daten geschrieben und dann die Transaktion abgebrochen wird, aber die Daten weiterhin für die Indizierung verwendet werden - wodurch ein "falsch-positives" Suchergebnis verbleibt - das Ergebnis ist für die Suchabfrage nicht mehr gültig.
Riak verwendet auch einen separaten Sentinel-Prozess , um zu bestimmen, welcher Knoten bei Failover-Bedingungen ein Master wird. Dieser Prozess ist jedoch nicht hoch verfügbar, was bedeutet, dass es für einige Sekunden möglich ist, dass während eine neue Kopie des -Schirmprozesses online geschaltet wird, ein neuer Knoten nicht hinzugefügt werden kann oder ein neuer Meister gewählt. Sie müssen diese Möglichkeit bei Hochspannungs-Failover-Bedingungen kennen.
Riak hat einige nette Features für Anwendungsentwickler, wie sekundäre Indizierung und integrierte JSON-Wertunterstützung. Die Datenbankreplikation für die Notfallwiederherstellung in anderen Datencentern ist nur in der kostenpflichtigen Version verfügbar, deren Preis auf ihrer Website zu finden ist (Mietpreise werden angezeigt, Lizenzpreise nur für die Anwendung angegeben).
Das Riak Control-Clusterüberwachungstool wird wegen seiner Verzögerungszeit bei der Überwachung von Clustern ebenfalls nicht besonders geschätzt. Riak ist sehr vielversprechend, und wenn Basho in zukünftigen Versionen mehr Enterprise - level Cluster-Management-Einrichtungen hinzufügen wird, wird es zu einem Best-in-Class-Produkt.