Inhaltsverzeichnis:
Video: Anwendung von Blitzhypnose in der Praxis 2024
Die Eigenschaft Konsistenz einer Datenbank bedeutet, dass Sobald Daten erfolgreich in eine Datenbank geschrieben wurden, können die folgenden Abfragen auf die Daten zugreifen und eine konsistente Sicht auf die Daten erhalten. In der Praxis bedeutet das: Wenn Sie einen Datensatz in eine Datenbank schreiben und diesen Datensatz sofort anfordern, sehen Sie ihn garantiert. Es ist besonders nützlich für Dinge wie Amazon-Bestellungen und Banküberweisungen.
Die Konsistenz ist eine gleitende Skala und ein Thema, das hier zu tief ist. In der NoSQL-Welt fällt die Konsistenz jedoch in der Regel in eines von zwei Lagern:
-
ACID-Konsistenz (ACID steht für Atomicity, Consistency, Isolation, Durability): ACID bedeutet, dass Daten vollständig konsistent sind, sobald Daten geschrieben sind. liest.
-
Eventual Consistency (BASE): BASE bedeutet, dass sobald die Daten geschrieben sind, sie schließlich zum Lesen angezeigt werden.
Es herrscht ein Kampf zwischen Leuten, die glauben, dass eine starke Konsistenz in einer Datenbank nicht erforderlich ist und diejenigen, die es absolut für notwendig halten ( Menschen bis NoSQL Unternehmen übersetzen "Marketingabteilungen! ).
Die Realität ist irgendwo dazwischen. Ist es wichtig, dass der Facebook-Post einer Person fünf Minuten lang nicht von allen Freunden gesehen wird? Nein wahrscheinlich nicht. Ändern Sie "Facebook-Post" in "Milliarden-Dollar-Finanztransaktion" und Ihre Einstellung ändert sich schnell! Welchen Konsistenzansatz Sie wählen, hängt von der Situation ab. Nach meiner Erfahrung ist jedoch in unternehmenskritischen Unternehmenssystemsituationen immer eine starke Konsistenz die erste Wahl.
ACID
ACID ist ein allgemeiner Satz von Prinzipien für Transaktions-Systeme, nicht etwas, das nur mit relationalen Systemen oder sogar nur mit Datenbanken verbunden ist, so dass es sich lohnt, darüber zu wissen. ACID bedeutet im Grunde: " Diese Datenbank verfügt über Möglichkeiten, um Daten zu beschädigen oder zu verlieren, ", was nicht für alle Datenbanken gilt. Tatsächlich bietet die große Mehrheit der NoSQL-Datenbanken keine ACID-Garantien.
Foundation DB, MarkLogic und Neo4j sind bemerkenswerte Ausnahmen. Einige NoSQL-Datenbanken bieten eine Garantie niedrigerer Qualität an, die als Prüfen und Festlegen bezeichnet wird, die überprüft, ob eine andere Person ein Dokument geändert hat, bevor eine Transaktion abgeschlossen werden kann. Dieses Verhalten ist normalerweise begrenzt, da es tendenziell auf einer Einzelsatzbasis implementiert wird.
MongoDB ist eine bemerkenswerte Datenbank, die Check- und Set-Funktionen bereitstellt. Mit MongoDB kann ein gesamter Knotenwert von Daten während einer Aktualisierung gesperrt werden, wodurch alle Lese- und alle Schreibvorgänge bis zum Abschluss der Operation verhindert werden.Das Unternehmen arbeitet jedoch daran, diese Einschränkung aufzuheben.
BASE
BASE bedeutet, dass die Datenbank, anstatt ACID-Garantien zu geben, eine abstimmbare Balance zwischen Konsistenz und Datenverfügbarkeit hat. Dies ist in der Regel der Fall, wenn Knoten in einem bestimmten Datenbankcluster als primäre Manager eines Teils der Datenbank fungieren und andere Knoten schreibgeschützte Replikate enthalten.
Um sicherzustellen, dass alle Clients alle Updates sehen (dh sie haben eine konsistente Sicht auf die Daten), muss ein Schreibzugriff auf den primären Knoten, der die Daten enthält, gesperrt werden, bis alle gelesenen Replikate auf dem neuesten Stand sind. Dies wird als zwei - Phasen-Commit bezeichnet - die Änderung wird lokal vorgenommen, aber angewendet und nur dann an den Client bestätigt, wenn alle anderen Knoten aktualisiert wurden.
BASE lockert diese Anforderung auf, so dass nur eine Teilmenge der Knoten, die dieselben Daten enthalten, aktualisiert werden muss, damit die Transaktion erfolgreich ist. Einige Zeit nachdem die Transaktion festgeschrieben wurde, wird das schreibgeschützte Replikat aktualisiert.
Der Vorteil dieses Ansatzes ist, dass Transaktionen schneller festgeschrieben werden. Lesbare Live-Repliken zu haben, bedeutet auch, dass Sie Ihre Datenleselast verbreiten können, wodurch das Lesen beschleunigt wird.
Der Nachteil ist, dass Clients, die sich mit einigen der gelesenen Replikate verbinden, veraltete Informationen für einen unbestimmten Zeitraum sehen können. In einigen Szenarien ist dieser Zustand in Ordnung. Wenn du eine neue Nachricht auf Facebook postest und einige deiner Freunde sie nicht für ein paar Minuten sehen, ist das kein großer Verlust. Wenn Sie jedoch einen Zahlungsauftrag an Ihre Bank senden, möchten Sie möglicherweise eine sofortige Transaktion.
Ein alternativer Ansatz für schreibgeschützte Replikate besteht darin, einen gemeinsam genutzten - nothing -Cluster zu haben, in dem nur ein Knoten in einem Cluster immer einen bestimmten Teil der Datenbank bedient.
Shared-Nothing bedeutet nicht, dass Sie die Replikation verlieren. Datenbanken, die diese Methode verwenden, replizieren in der Regel ihre Daten in einen sekundären Bereich auf einem anderen primären Knoten oder Knoten - aber nur ein Knoten ist der Master für Lese- und Schreibvorgänge zu jeder Zeit.
Shared-Nothing-Cluster haben den Vorteil eines einfacheren Konsistenzmodells, erfordern jedoch ein zweiphasiges Commit für Replikate. Diese Tatsache bedeutet, dass die Transaktion gesperrt wird, während alle Replikate aktualisiert werden. (Eine interne Sperre plus Sperren für andere Knoten ergibt zwei Phasen.)
Dies hat jedoch normalerweise weniger Auswirkungen als freigegebene Datencluster mit schreibgeschützten Replikaten, da Replikdatenbereiche mit gemeinsam genutztem Nichts keine Leseanforderungen für diese erhalten. Teil der Datenbank. Daher sind zweiphasige Commits in einem Shared-Nothing-Cluster schneller als in einem Cluster mit lesbaren Repliken.
ACID oder BASIS wählen?
Wie Sie vielleicht erwarten würden, liegt ein Großteil des Arguments darin, dass NoSQL-Anbieter sich von ihren Konkurrenten unterscheiden können, indem sie einen anderen, einzigartigen Ansatz beanspruchen. Interessant ist jedoch die Anzahl der NoSQL-Anbieter mit ACID-Konformität in ihrer Roadmap.
Einige NoSQL-Datenbanken haben ACID-Konformität in ihrer Roadmap, obwohl sie Befürworter von BASE sind, was zeigt, wie relevant ACID-Garantien für Unternehmens-, Mission - kritische Systeme sind.
Viele Unternehmen verwenden BASE-Konsistenz-Produkte, wenn sie Ideen testen, weil sie kostenlos sind, migrieren dann aber zu einer ACID-kompatiblen kostenpflichtigen Datenbank, wenn sie in einem geschäftskritischen System live gehen möchten.
Der einfachste Weg, um zu entscheiden, ob Sie ACID benötigen, ist die Berücksichtigung der Interaktionen, die Benutzer und andere Systeme mit Ihren Daten haben. Wenn Sie beispielsweise Daten hinzufügen oder aktualisieren, ist es wichtig, dass die nächste Abfrage die Änderung erkennt. Mit anderen Worten hängen wichtige Entscheidungen vom aktuellen Stand der Datenbank ab? Würden leicht überholte Daten bedeuten, dass diese Entscheidungen tödlich sein könnten?
Bei Finanzdienstleistungen ist die Notwendigkeit von Konsistenz offensichtlich. Denken Sie an Händler, die Aktien kaufen. Sie müssen den Barbestand vor dem Handel überprüfen, um sicherzustellen, dass sie das Geld haben, um den Handel zu decken. Wenn sie das richtige Guthaben nicht sehen, entscheiden sie sich, Geld für eine andere Transaktion auszugeben. Wenn die von ihnen abgefragte Datenbank letztendlich nur konsistent ist, sehen sie möglicherweise keinen Mangel an ausreichenden Mitteln und setzen ihre Organisation somit finanziellen Risiken aus.
Ähnliche Fälle können für ACID über BASE in der Gesundheits-, Verteidigungs-, Geheimdienst- und anderen Sektoren aufgebaut werden. Es läuft jedoch alles auf die Daten und die Wichtigkeit sowohl der Aktualität als auch der Datensicherheit hinaus.