Ich habe mir die Wikipedia-Seite für NoSQL angesehen und sie listet verschiedene Variationen der Key / Value-Store-Datenbank auf, aber ich kann keine Details dazu finden, was dies in diesem Kontext unter Key / Value-Store zu verstehen ist. Könnte mir jemand eine Erklärung erklären oder verlinken? Wann würde ich eine solche Datenbank verwenden?
56
Antworten:
Kennen Sie das Konzept eines Schlüssel / Wert-Paares? Vorausgesetzt, Sie kennen sich mit Java oder C # aus, liegt dies in der Sprache Map / Hash / Datatable / KeyValuePair vor (das letzte ist bei C # der Fall).
Die Funktionsweise wird in diesem kleinen Beispieldiagramm veranschaulicht:
Wenn Sie einen Schlüssel (links) und einen Wert (rechts) haben, kann dies ein String, ein Int oder dergleichen sein. Bei den meisten KVP-Objekten können Sie jedes Objekt auf der rechten Seite speichern, da es sich nur um einen Wert handelt.
Da Sie für ein bestimmtes Objekt, das Sie zurückgeben möchten, immer einen eindeutigen Schlüssel haben, können Sie einfach die Datenbank nach diesem eindeutigen Schlüssel abfragen und die Ergebnisse von dem Knoten abrufen, auf dem sich das Objekt befindet. da es andere Dinge gibt, wie das Abfragen der ersten n Knoten, um einen Wert zurückzugeben, der mit den Rückgaben anderer Knoten übereinstimmt).
Mein Beispiel oben ist sehr einfach. Hier ist eine etwas bessere Version des KVP
Wie Sie sehen können, besteht die einfache Schlüsselerzeugung darin, die benutzerspezifische Nummer, einen Unterstrich und das Objekt "user" zu setzen. Auch dies ist eine einfache Variante, aber ich denke, wir beginnen zu verstehen, dass wir den Wert herausziehen können, solange wir den Teil auf der linken Seite definieren und konsistent formatieren können.
Beachten Sie, dass es keine Einschränkung für den Schlüsselwert (ok, es kann einige Einschränkungen geben, z. B. nur für Text) oder für die value-Eigenschaft (es kann eine Größenbeschränkung geben) gibt, aber ich hatte bisher keine wirklich komplexen Systeme. Lass uns versuchen, noch ein bisschen weiter zu gehen:
Sie bekommen die Idee ... all diese werden in einer massiven "Tabelle" auf den verteilten Knoten gespeichert (es steckt Mathematik dahinter) und Sie fragen das verteilte System einfach nach dem Wert, den Sie mit Namen benötigen.
Zumindest verstehe ich so, wie das alles funktioniert. Ich kann ein paar Dinge falsch machen, aber das sind die Grundlagen.
obligatorischer Wikipedia-Link http://en.wikipedia.org/wiki/Associative_array
quelle
user1923_color: red, user1923_age: 18, ...
alsuser1923: {color: red, age: 18, ...}
.In SQL-Begriffen ist eine NoSQL-Datenbank eine einzelne Tabelle mit zwei Spalten: Eine ist der (Primär-) Schlüssel und die andere der Wert. Und das war's, das war's mit der NoSQL-Magie.
Sie würden NoSQL aus einem Hauptgrund verwenden: Skalierbarkeit.
Wenn Ihre Anwendung Millionen von Abfragen pro Sekunde verarbeiten muss, ist die einzige Möglichkeit, dies zu erreichen, das Hinzufügen weiterer Server. Das ist mit NoSQL sehr billig und einfach. Im Gegensatz dazu ist die Skalierung einer herkömmlichen SQL-Datenbank viel komplizierter.
Nur die größten Websites nutzen das volle NoSQL-Potenzial, dh Facebook, mit Tausenden von Servern, auf denen Cassandra ausgeführt wird .
Ich empfehle dringend, diesen Blog-Beitrag zu lesen und SQL, NoSQL und ORM zu vergleichen:
http://seldo.com/weblog/2010/07/12/in_defence_of_sql
quelle
Ich gehe davon aus, dass Sie grundlegende Kenntnisse über NoSQL-Movement- und nicht relationale Datenbankmodelle haben.
Der Schlüsselwertspeicher ist eines der nicht relativen Datenbankmodelle, wie z. B. grafische, dokumentorientierte Datenbankmodelle.
when would I use such a database?
Could someone explain or link an explanation to me?
Es ist eher eine architektonische Entscheidung und eine umstrittene ... Sie müssen viele Faktoren wie Skalierbarkeit, Leistung usw. berücksichtigen.
Wenn Sie die folgenden Folien / Artikel anzeigen, erhalten Sie eine Vorstellung davon, wann, warum und warum Sie den Schlüsselwertspeicher nicht verwenden. :)
quelle
Andere haben es erklärt, aber ich werde es trotzdem versuchen.
Eine Schlüssel- / Wertedatenbank speichert Daten nach einem Primärschlüssel. Auf diese Weise können wir einen Datensatz in einem Bucket eindeutig identifizieren. Da alle Werte eindeutig sind, sind Suchvorgänge unglaublich schnell: Es handelt sich immer um eine einfache Festplattensuche.
Der Wert ist nur irgendeine Art von Wert. Die Art und Weise, wie die Daten gespeichert werden, ist für die Datenbank selbst undurchsichtig. Wenn Sie Daten in einem Schlüssel- / Wertspeicher speichern, ist es der Datenbank egal, ob es sich um XML, JSON, Text oder ein Bild handelt. Tatsächlich verlagern wir in einem Schlüssel- / Wertspeicher die Verantwortung für das Verständnis, wie Daten aus der Datenbank in den Anwendungen gespeichert werden, die unsere Daten abrufen. Da Sie nur einen Schlüsselbereich pro Bucket haben, ist es sehr einfach, die Schlüssel auf viele Server zu verteilen und verteilte Programmiertechniken zu verwenden, um einen schnellen Zugriff auf diese Daten zu ermöglichen (jeder Server speichert einen Datenbereich). .
Ein Nachteil dieses Datenansatzes ist, dass das Suchen eine sehr schwierige Aufgabe ist. Sie müssen entweder jeden Datensatz in Ihrem Datenkorb lesen oder Sekundärindizes selbst erstellen .
Es gibt einige Gründe, warum Sie eine Schlüssel- / Wertedatenbank verwenden möchten:
Es gibt ungefähr so viele Gründe, eine Schlüssel- / Wertedatenbank zu verwenden wie ein RDBMS, und es gibt genau so viele Argumente, die eine über die andere rechtfertigen. Es ist wichtig, einen Blick darauf zu werfen, wie Sie Ihre Daten abfragen, und zu verstehen, wie dieses Datenzugriffsmuster das Einfügen und Speichern von Daten steuert.
Denken Sie daran, dass eine Schlüssel- / Wertedatenbank nur eine Art von NoSQL-Datenbank ist.
quelle
Wenn Sie eine relationale Datenbank haben, können Sie leicht damit experimentieren:
So waren früher alle Datenbanken, wobei Berkeley DBM ab 1979 ein gutes Beispiel war. Seitdem haben sich die Dinge weiterentwickelt (Sie können in jedem RDBMS viele Werte pro Schlüssel haben). Für viele Anwendungen ist ein Schlüsselwertspeicher ausreichend (z. B. speichert sendmail so seine Aliase). Wenn Sie jedoch feststellen, dass Sie den Wert in Ihrem eigenen Code vorverarbeiten (oder Zeichenfolgen verketten, um Ihren "Schlüssel" zu bilden), den Wert möglicherweise auf einen Begrenzer aufteilen oder ihn analysieren, bevor Sie ihn verwenden können, sind Sie wahrscheinlich besser dran ein RDBMS und speichern Sie es tatsächlich auf diese Weise.
quelle