Umgang mit Partitionen in NoSQL

Das Wort Partition wird für zwei verschiedene Konzepte in NoSQL Land verwendet. EIN Datenpartition

ist, dass die Daten einen Mechanismus für die Gewährleistung gleichmäßig über einen Cluster verteilt. Auf der anderen Seite, ein Netzwerkpartition tritt auf, wenn zwei Teile der gleichen Datenbank-Cluster nicht kommunizieren kann.

Bei sehr großen Clustersystemen, ist es immer wahrscheinlicher, dass ein Ausfall von einem Gerät passieren wird. Wenn ein Netzwerk-Switch zwischen Servern in einem Cluster fehlschlägt, ein Phänomen, bezeichnet als (im Computer-Jargon) geteiltes Gehirn auftritt. In diesem Fall werden Empfangs einzelne Server noch Anfragen, aber sie können nicht miteinander kommunizieren.

Dieses Szenario kann zu Inkonsistenz der Daten führen oder einfach nur zu einer reduzierten Kapazität in der Datenspeicherung, da die Netzwerkpartition mit den am wenigsten Server aus dem Cluster entfernt wird (oder # 147-gestimmt # 148- im echten Big Brother Mode aus).

tolerieren Partitionen

Sie haben zwei Möglichkeiten, wenn ein Netzwerk-Partition passiert:

  • Weiter, auf einer bestimmten Ebene, Lese- und Schreiboperationen zu bedienen.

  • # 147-Vote # 148- ein Teil der Trennwand aus und entscheiden, die Daten später zu beheben, wenn beide Teile miteinander kommunizieren können. Dies beinhaltet in der Regel die Cluster eine Replik lesen als neuer Master für jeden fehlenden Hauptpartitionsknoten wählen.

Riak können Sie bestimmen, wie oft Daten repliziert wird (drei Kopien, die standardmäßig - das heißt, n = 3) und wie viele Server, um für eine Lese abgefragt werden müssen, um erfolgreich zu sein. Das bedeutet, dass, wenn der primäre Master eines Schlüssels auf der falschen Seite eines Netzwerks Partition, können Leseoperationen immer noch erfolgreich sein, wenn die beiden anderen Server verfügbar sind (dh, r = 2 Lese Verfügbarkeit).

Riak Griffe schreibt, wenn die primäre Partition Server ausfällt genannt, ein System durch die Verwendung angedeutet Handoff. Wenn Daten ursprünglich repliziert wird, wird der erste Knoten für eine bestimmte Schlüssel Partition geschrieben, zusammen mit (Standard) zwei der folgenden Nachbarknoten.

Wenn der primäre nicht geschrieben werden kann, wird der nächste Knoten in dem Ring geschrieben. Diese Schreibvorgänge werden übergeben effektiv an den nächsten Knoten. Wenn der primäre Server wieder nach oben kommt, werden die Schreibvorgänge auf diesem Knoten wiederholt, bevor es wieder primäre Schreiboperationen übernimmt.

In diesen beiden Operationen kann Versionierung Inkonsistenzen passieren, weil verschiedene Repliken in verschiedenen Versionszuständen sein kann, wenn auch nur für wenige Millisekunden.

Riak beschäftigt noch ein weiteres System mit dem Namen aktive Anti# 8208-Entropie Um dieses Problem zu lindern. Dieses System fischt mit dem Netz durch aktualisierte Werte und stellt sicher, dass Repliken zu einem bestimmten Zeitpunkt aktualisiert werden, vorzugsweise eher früher als später. Dies hilft, Konflikte beim Lesen zu vermeiden, während eine hohe Einnahme Geschwindigkeit beibehalten, die einen zwei # 8208-Phase vermeidet Festschreibung durch andere NoSQL-Datenbanken mit Master # 8208-Slave, gemeinsame # 8208-nichts-Clustering-Unterstützung verwendet.

Wenn ein Konflikt auf Lese geschehen ist, Riak verwendet lesen Reparatur um zu versuchen, nur die neuesten Daten zurückzukehren. obwohl Schließlich und je nach Konsistenz und Verfügbarkeit Einstellungen Sie verwenden, kann die Client-Anwendung mit mehreren Versionen angeboten werden und bat um sich zu entscheiden.

In manchen Situationen ist dies Kompromiss wünschenswert, und viele Anwendungen können intuitiv wissen, basierend auf den Daten präsentiert, die Version zu verwenden und die Version zu verwerfen.

Sekundäre Indizierung

Sekundärindizes sind Indizes auf bestimmte Daten in einem Wert. Die meisten Schlüssel # 8208-Wertspeicher lassen Sie diese Anpassung an die Anwendung auf. Allerdings Riak ist anders, ein System unter Verwendung genannt Dokument# 8208-Basis-Partitionierung dass ermöglicht eine sekundäre Indizierung.

Dokument # 8208-basierte Partitionierung geht davon aus, dass Sie JSON Strukturen zur Riak Datenbank sind zu schreiben. Sie können dann von Indizes für bestimmte benannte Eigenschaften innerhalb dieser JSON Struktur eingerichtet ist, wie gezeigt:

{# 147-Order-ID # 148-: 5001, # 147-Kunden-ID # 148-: 1.429.857, # 147-order-date # 148-: # 147-2014-09-24 # 148 - # 147-Gesamt # 148-: 134,24}

Wenn Sie eine Anwendung, die eine Kundenaufträge für den Vormonat zeigt, dann möchten Sie alle Datensätze abgefragt werden, wie gezeigt, in dem der Kunde id ein fester Wert (1429857) ist und der Auftrag # 8208-Datum innerhalb eines bestimmten Bereichs ist (Anfang und am Ende des Monats).

In den meisten Schlüssel # 8208-Wert speichert, erstellen Sie einen anderen Eimer, dessen Schlüssel die kombinierte Kundennummer und Monat und der Wert ist eine Liste von Auftrags-IDs. Doch in Riak, fügen Sie einfach einen Sekundärindex sowohl Kunde # 8208-ID (integer) und Ordnung # 8208-date (Datum), die zusätzlichen Speicherplatz in Anspruch nimmt, hat aber den Vorteil, auf den Anwendungsentwickler transparent zu sein.

Diese Indizes werden auch Live aktualisiert - was bedeutet, es gibt keine Verzögerung zwischen einem Dokumentwert in Riak die Aktualisierung und die Indizes zu ausstehen. Diese Live-Zugriff auf die Daten ist schwieriger zu ziehen aus, als es scheint. Nach allem, wenn die Indizes inkonsistent sind, werden Sie nie die in ständiger Rechtsprechung entschieden Daten finden!

Auswertung von Riak

Basho, die kommerzielle Einrichtung hinter Riak, sagt, dass die kommende Version 2.0 NoSQL Datenbank immer starke Konsistenz hat, einen Anspruch, der andere NoSQL-Anbieter zu machen. Die Behauptung von NoSQL-Anbieter immer starke Konsistenz zu haben ist wie behauptet, ein starkes Vegetarier zu sein. . . außer sonntags, wenn Sie Roastbeef.

Riak ist kein ACID # 8208-kompatible Datenbank. Seine Konfiguration kann nicht so verändert werden, dass sie in die ACID-Modus ausgeführt wird. Kunden können inkonsistente Daten während des normalen Betriebs oder während der Netzwerk-Partitionen zu bekommen. Riak handelt absolute Konsistenz für erhöhte Verfügbarkeit und Partitionstoleranz.

Riak in starke Konsistenz-Modus ausgeführt wird, bedeutet, dass seine Lese Repliken zur gleichen Zeit wie der primäre Master aktualisiert werden. Es handelt sich um ein zwei-# 8208-Phasen-Commit - im Grunde, der Master-Knoten zu den anderen Knoten zu schreiben, bevor es bestätigt, dass der Schreibvorgang abgeschlossen ist.

Zum Zeitpunkt des Schreibens dieses Artikels, Riak starke Konsistenz Modus unterstützt keine Sekundärindizes oder komplexe Datentypen (zB JSON). Hoffentlich wird fix Basho dieses Problem in den kommenden Versionen der Datenbank.

Riak Search (ein Rebranding und integrierte Suchmaschine Apache Solr eine eventuell konsistente Update-Modell verwendet) kann zu Fehlalarmen erzeugen, wenn eine starke Konsistenz verwenden. Diese Situation tritt auf, da die Daten geschrieben werden können und dann die Transaktion aufgegeben, aber die Daten noch für die Indizierung verwendet wird - ein "false positive" Suchergebnis zu verlassen - das Ergebnis ist eigentlich nicht mehr gültig für die Suchanfrage.

Riak verwendet auch eine separate Sentinel-Prozess welcher Knoten wird ein Master in Failover-Bedingungen zu bestimmen. Dieses Verfahren ist jedoch nicht hoch verfügbar, was bedeutet, dass für einige Sekunden, ist es möglich, dass, während eine neue Kopie der Sentinel-Prozess online geschaltet ist, kann ein neuer Knoten hinzugefügt oder ein neuer Master gewählt. Sie müssen in hohen # 8208-Stress-Failover-Bedingungen dieser Möglichkeit bewusst zu sein.

Riak hat einige nette Features für Anwendungsentwickler haben, wie sekundäre Indizierung und gebaut # 8208-in JSON-Wert-Unterstützung. Die Datenbankreplikation für Disaster Recovery zu anderen Datenzentren ist nur in der für die Version bezahlt, deren Preis auf ihrer Website (Mietpreisen gezeigt, Dauerlizenz Preise auf Anfrage angegeben werden) zu finden.

Die Riak Steuer Cluster-Monitoring-Tool ist auch nicht sehr wegen seiner Verzögerungszeit betrachtet, wenn Cluster zu überwachen. Riak hält viel versprechend, und wenn Basho mehr hinzufügen Unternehmen# 8208-Ebene Cluster # 8208-Management-Einrichtungen in zukünftigen Versionen wird es eine beste # 8208-in # 8208-Class-Produkt geworden.

Menü