it-swarm.com.de

Was ist eine Schlüssel- / Wertspeicherdatenbank?

Ich habe auf der Wikipedia-Seite nach NoSQL gesucht und dort sind verschiedene Variationen der Key/Value Store-Datenbank aufgeführt, aber ich kann keine Details darüber finden, was dies in diesem Zusammenhang unter Key/Value Store versteht. Könnte mir jemand eine Erklärung erklären oder verknüpfen? Wann würde ich eine solche Datenbank verwenden?

56
indyK1ng

Kennen Sie das Konzept eines Schlüssel/Wert-Paares? Vorausgesetzt, Sie kennen Java oder C # ist dies in der Sprache als map/hash/datatable/KeyValuePair (das letzte ist im Fall von C #)

Die Funktionsweise wird in diesem kleinen Beispieldiagramm demonstriert:

Color        Red
Age          18
Size         Large
Name         Smith
Title        The Brown Dog

Wenn Sie einen Schlüssel (links) und einen Wert (rechts) haben ... beachten Sie, dass es sich um eine Zeichenfolge, ein Int oder ähnliches handeln kann. 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 immer einen eindeutigen Schlüssel für ein bestimmtes Objekt haben, das Sie zurückgeben möchten, können Sie einfach die Datenbank nach diesem eindeutigen Schlüssel abfragen und die Ergebnisse von dem Knoten zurückerhalten, auf dem sich das Objekt befindet (aus diesem Grund ist dies für verteilte Systeme geeignet.) da es andere Dinge gibt, wie das Abrufen der ersten n Knoten, um einen Wert zurückzugeben, der mit den Rückgaben anderer Knoten übereinstimmt).

Jetzt ist mein Beispiel oben sehr einfach, daher hier eine etwas bessere Version des KVP

user1923_color    Red
user1923_age      18
user3371_color    Blue
user4344_color    Brackish
user1923_height   6' 0"
user3371_age      34

Wie Sie sehen können, besteht die einfache Schlüsselgenerierung darin, "Benutzer" die eindeutige Benutzernummer, einen Unterstrich und das Objekt einzugeben. 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 ihn 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 Text) oder für die value-Eigenschaft (möglicherweise gibt es eine Größenbeschränkung) gibt, aber bisher hatte ich keine wirklich komplexen Systeme. Lassen Sie uns versuchen, etwas weiter zu gehen:

app_setting_width      450
user1923_color         Red
user1923_age           18
user3371_color         Blue
user4344_color         Brackish
user1923_height        6' 0"
user3371_age           34
error_msg_457          There is no file %1 here
error_message_1        There is no user with %1 name
1923_name              Jim
user1923_name          Jim Smith
user1923_lname         Smith
Application_Installed  true
log_errors             1
install_path           C:\Windows\System32\Restricted
ServerName             localhost
test                   test
test1                  test
test123                Brackish
devonly
wonderwoman
value                  key

Sie haben die Idee ... all diese würden in einer massiven "Tabelle" auf den verteilten Knoten gespeichert (dahinter steckt Mathematik) und Sie würden das verteilte System einfach nach dem Wert fragen, 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

42
jcolebrand

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 ist die ganze NoSQL-Magie.

Sie würden NoSQL aus einem Hauptgrund verwenden: Skalierbarkeit.

Wenn Ihre Anwendung Millionen von Abfragen pro Sekunde verarbeiten muss, können Sie dies nur erreichen, indem Sie weitere Server hinzufügen. Das ist mit NoSQL sehr günstig und einfach. Im Gegensatz dazu ist die Skalierung einer herkömmlichen SQL-Datenbank viel komplizierter.

Nur die größten Websites da draußen nutzen tatsächlich das volle NoSQL-Potenzial, d. H. Facebook, auf dem Tausende von Servern ausgeführt werden Cassandra .

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

25
vz0

Ich gehe davon aus, dass Sie grundlegende Kenntnisse über NoSQL-Bewegungen und nicht relationale Datenbankmodelle haben.

Der Schlüsselwertspeicher ist eines der nicht relationalen Datenbankmodelle, wie z. B. dokumentenorientierte Datenbankmodelle.

Schlüsselwertspeicher und die NoSQL-Bewegung

Im Allgemeinen gelang es SQL, mit speziell strukturierten Daten umzugehen und hochdynamische Abfragen entsprechend den Anforderungen der betreffenden Abteilung zuzulassen.

Während es in diesem speziellen Bereich noch keine wirklichen Konkurrenten für SQL gibt, ist der Anwendungsfall in alltäglichen Webanwendungen ein anderer. Sie werden keinen hochdynamischen Bereich von Abfragen finden, die voll von äußeren und inneren Verknüpfungen, Vereinigungen und komplexen Berechnungen über große Tabellen sind. In der Regel finden Sie eine sehr objektorientierte Denkweise. Insbesondere bei der Übernahme von Mustern wie MVC werden die Daten im Back-End normalerweise nicht für eine Datenbank modelliert, sondern für eine logische Integrität, die es den Menschen auch ermöglicht, mit dem Verständnis großer Software-Infrastrukturen fertig zu werden. Um diese objektorientierten Modelle in relationale Datenbanken zu integrieren, wird eine große Normalisierung durchgeführt, die zu komplexen Hierarchien von Tabellen führt und sich vollständig gegen die Hauptidee der objektorientierten Programmierung richtet. Server, die dem SQL-Standard entsprechen, müssen auch einen großen Teil des Codes implementieren, der für die einfache Datenspeicherung überhaupt nicht von Nutzen ist und nur den Speicherbedarf, die Sicherheitsrisiken und die Leistung beeinträchtigt.

Die Tatsache, dass SQL beliebige dynamische Abfragen für komplexe Datensätze zulässt, wird durch die Verwendung einer SQL-Datenbank nur für die dauerhafte Speicherung objektorientierter Daten unbrauchbar, was heutzutage im Grunde die meisten Anwendungen tun.

Hier kommen Key Value Stores ins Spiel. Key value stores allow the application developer to store schema-less data. This data is usually consisting of a string which represents the key and the actual data which is considered to be the value in the "key - value" relationship. Die Daten selbst sind normalerweise eine Art Grundelement der Programmiersprache (eine Zeichenfolge, eine Ganzzahl, ein Array) oder ein Objekt, das von den Programmiersprachenbindungen an den Schlüsselwertspeicher gemarshallt wird. Dies ersetzt die Notwendigkeit eines festen Datenmodells und macht die Anforderung ordnungsgemäß formatierter Daten weniger streng.

They all allow storage of arbitrary data which is being indexed using a single key to allow retrieval. Der größte Unterschied für die "einfacheren" Geschäfte besteht darin, wie Sie sich (wenn möglich) authentifizieren oder auf verschiedene Geschäfte zugreifen können (oder nicht). Während die Geschwindigkeitsvorteile beim Speichern und Abrufen von Daten ein Grund sein könnten, sie gegenüber gängigen SQL-Datenbanken in Betracht zu ziehen, besteht ein weiterer großer Vorteil bei der Verwendung von Schlüsselwertspeichern darin, dass der resultierende Code im Vergleich zu eingebetteten SQL-Zeichenfolgen in sauber und einfach aussieht Ihre Programmiersprache. Dies ist etwas, mit dem Menschen in der Regel mit objektrelationalen Mapping-Frameworks wie Hibernate oder Active Record kämpfen. Objektrelationale Mapper scheinen im Grunde genommen einen Schlüsselwertspeicher zu emulieren, indem sie viel wirklich komplexen Code zwischen einer SQL-Datenbank und einer objektorientierten Programmiersprache hinzufügen.

Eine ganze Gemeinschaft von Menschen kommt unter dem Tag " NoSQL " zusammen und diskutiert diese Vor- und Nachteile der Verwendung von Alternativen zu relationalen Datenbankverwaltungssystemen. lesen Sie mehr
Dies ist ein etwas alter Artikel, aber ich fand ihn sehr nützlich.

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 ansehen, erhalten Sie eine Vorstellung davon, wann, warum und warum Sie den Schlüsselwertspeicher nicht verwenden :)

14
CoderHawk

Andere haben das erklärt, aber ich werde trotzdem einen Stich machen.

Eine Schlüssel/Wert-Datenbank 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 ist immer eine einfache Festplattensuche.

Der Wert ist einfach jede 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, weiß die Datenbank nicht, 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 gespeichert werden, in die Anwendungen, die unsere Daten abrufen. Da Sie nur einen einzigen Schlüsselbereich pro Bucket benötigen, 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 Ansatzes für Daten ist, dass die Suche eine sehr schwierige Aufgabe ist. Sie müssen entweder jeden Datensatz in Ihrem Datenbereich lesen oder Sekundärindizes selbst erstellen.

Es gibt einige Gründe, warum Sie eine Schlüssel-/Wertedatenbank verwenden möchten:

  • Wenn die Schreibleistung Ihre höchste Priorität ist. Mozilla Test Pilot verwendet eine Schlüssel-/Wertedatenbank, um Daten schnell aufzuzeichnen.
  • Wenn Lesevorgänge garantiert nur von PK ausgeführt werden.
  • Wenn Sie mit einem flachen Datenmodell arbeiten.
  • Wenn Sie mit einem umfangreichen, komplexen Datenmodell arbeiten, das in einem RDBMS nicht modelliert werden kann.

Es gibt ungefähr so ​​viele Gründe für die Verwendung einer Schlüssel-/Wertedatenbank wie für die Verwendung eines RDBMS, und es gibt ebenso viele Argumente, um einander zu 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.

12

Wenn Sie eine relationale Datenbank haben, können Sie leicht damit experimentieren:

create table keyvalue (my_key varchar2(255), my_value varchar2(255));
create unique index ix_keyvalue on keyvalue (my_key, my_value);

So waren früher alle Datenbanken, wobei Berkeley DBM ein gutes Beispiel aus dem Jahr 1979 war. Seitdem haben sich die Dinge weiterentwickelt (Sie können viele Werte pro Schlüssel haben in jedem RDBMS). Für viele Anwendungen ist ein Schlüsselwertspeicher ausreichend (z. B. speichert sendmail seine Aliase auf diese Weise). Wenn Sie jedoch feststellen, dass Sie den Wert in Ihrem eigenen Code vorverarbeiten (oder Zeichenfolgen verketten, um Ihren "Schlüssel" zu erstellen), den Wert möglicherweise in ein Trennzeichen aufteilen oder analysieren, bevor Sie ihn verwenden können, sind Sie wahrscheinlich besser dran ein RDBMS und tatsächlich so speichern.

8
Gaius