Wenn ein Schlüssel-Wert-Datenspeicher im Vergleich zu einer traditionellen relationalen DB benutzen?

StackOverflow https://stackoverflow.com/questions/1500611

Frage

Wenn würde man einen Schlüssel-Wert-Datenspeicher über einen relationalen DB wählen? Welche Überlegungen gehen in der einen oder anderen entscheiden? Wenn sowohl die Mischung des besten Weges? Bitte geben Sie Beispiele, wenn Sie können.

War es hilfreich?

Lösung

Nach meiner Erfahrung, wenn Sie selbst die Frage zu stellen, ob vs esoterischen Praktiken traditionell verwenden, dann traditionelle gehen. Während esoterische Praktiken sexy, anspruchsvoll sind und Spaß, ruft 99,999% der Anträge für einen traditionellen Ansatz.

Im Hinblick vs KV auf relationalen, die Frage, die Sie sollte fragen ist:

  

Warum sollte ich nicht will ein relationales Modell für dieses Szenario verwenden: ...

Da Sie das Szenario nicht beschrieben haben, ist es unmöglich, dass jemand Ihnen zu sagen, warum Sie es nicht verwenden sollten. Die „catch all“ Grund für KV ist die Skalierbarkeit, die nun kein Problem ist. Haben Sie die Regeln der Optimierung wissen?

  1. Tun Sie es nicht.
  2. (nur für Experten) Tun Sie es jetzt nicht mehr.

KV ist eine hoch optimierte Lösung für die Skalierbarkeit, die höchstwahrscheinlich vollständig für Ihre Anwendung unecessary sein wird.

Andere Tipps

Key-Wert, hierarchische, Karten reduzieren oder Graph-Datenbank-Systeme sind viel näher an Umsetzungsstrategien, werden sie auf die physische Darstellung stark gebunden. Der primäre Grund einen von ihnen zu wählen ist, wenn es ein überzeugendes Leistungs Argument ist und sie paßt Ihre Datenverarbeitungsstrategie sehr eng. Hüten Sie sich vor, Ad-hoc-Abfragen sind in der Regel nicht praktikabel für diese Systeme, und du bist besser dran, auf Ihre Fragen vor der Zeit zu entscheiden.

Relationale Datenbanksysteme versuchen, die logische, geschäftsorientierten Modell aus den zugrunde liegenden physikalischen Darstellung und Verarbeitungsstrategien zu trennen. Diese Trennung ist unvollkommen, aber immer noch recht gut. Relational-Systeme sind für die Fakten Handhabung und Extrahieren von zuverlässigen Informationen aus Sammlungen von Fakten. Relational-Systeme sind auch groß bei Ad-hoc-Abfragen, die die anderen Systeme sind notorisch schlecht. Das ist eine gute Passform in der Geschäftswelt und vielen anderen Orten. Deshalb relationale Systeme sind so weit verbreitet.

Wenn es sich um eine Business-Anwendung ist, ist ein relationales System fast immer die Antwort. Bei anderen Systemen, ist es wahrscheinlich die Antwort. Wenn Sie mehr von einem Datenverarbeitungs Problem haben, wie eine Pipeline von Dingen, die passieren müssen, und Sie haben große Mengen an Daten, und Sie wissen, alle Ihre Anfragen vorne, kann ein anderes System das Richtige für Sie.

Wenn Sie Ihre Daten einfach eine Liste der Dinge, und Sie können eine eindeutige Kennung für jedes Element ableiten, dann ist ein KVS ein gutes Spiel. Sie sind in der Nähe Implementierungen der einfachen Datenstrukturen wir in Freshman Informatik gelernt und erlauben nicht für komplexe Beziehungen.

Ein einfacher Test: können Sie Ihre Daten und alle seine Beziehungen als eine verknüpfte Liste oder Hash-Tabelle darstellen? Wenn ja, arbeitet ein KVS kann. Wenn nein, dann müssen Sie ein RDB.

Sie müssen noch eine KVS finden, die in Ihrer Umgebung funktionieren. Unterstützung für KVSes, auch die wichtigsten sind, ist bei weitem nicht, was es ist für, sagen wir, PostgreSQL und MySQL / MariaDB.

Eine traditionelle relationale Datenbank hat Probleme über einen Punkt hinaus zu skalieren. Wo dieser Punkt ist, hängt ein wenig auf, was Sie zu tun versuchen.

Alle (die meisten?) Der Anbieter von Cloud Computing bieten Schlüsselwertdaten speichert.

Wenn Sie jedoch eine vernünftige Größe Anwendung mit einer komplizierten Datenstruktur, dann die Unterstützung, die Sie von der Verwendung einer relationalen Datenbank erhalten können Ihre Entwicklungskosten reduzieren.

IMO, Schlüsselwertpaar (z NoSQL-Datenbanken) funktioniert am besten, wenn die zugrunde liegenden Daten sind unstrukturiert, unberechenbar, oder oft zu ändern. Wenn Sie nicht strukturierte Daten haben, um eine relationale Datenbank wird mehr Ärger als sein Wert, weil Sie viele Schemaänderungen und / oder durch Reifen springen müssen, um Ihre Daten an die Struktur zu entsprechen.

KVP / JSON / NoSQL ist groß, weil Änderungen an der Datenstruktur erfordern nicht vollständig das Datenmodell Refactoring. ein Feld, um Ihre Daten Objekt hinzuzufügen ist einfach eine Sache, es zu den Daten hinzuzufügen. Die andere Seite der Medaille ist, gibt es weniger Einschränkungen und Validierungsprüfungen in einer KVP / NoSQL-Datenbank als eine relationale Datenbank, so dass Ihre Daten chaotisch vielleicht bekommen sind.

Es gibt Leistung und platzsparende Vorteile für relationale Datenmodelle. Normalisieren relationale Daten können Verständnis machen und die Daten leichter validieren, weil es Tabellenschlüssel Beziehungen und Einschränkungen, die Ihnen zu helfen.

Eines der schlimmsten Muster ich gesehen habe versucht, es in beide Richtungen zu haben. ein Schlüssel-Wert-Paar in eine relationale Datenbank zu setzen versuche, ist häufig ein Rezept für eine Katastrophe. Ich würde empfehlen, die Technologie, die in erster Linie Ihre Daten entspricht.

Wenn Sie O (1) Lookups von Werten basierend auf Schlüsseln wollen, dann wollen Sie einen KV-Shop. Das heißt, wenn Sie die Daten des Formulars k1={foo}, k2={bar} haben, usw., auch wenn die Werte größer / verschachtelte Strukturen und wollen schnelle Lookups, möchten Sie einen KV-Shop. Auch mit dem richtigen Indizierung können Sie nicht O (1) Lookups in einer relationalen DB für beliebige Tasten erreichen. Manchmal wird dies als „Zufall Lookups“.

Alliteratively angegeben, wenn Sie überhaupt nur durch eine Spalte abfragen, ein „Primärschlüssel“, wenn man so will, den Rest der Daten abzurufen, dann diese Spalte als Schlüsselraum verwenden und den Rest der Daten als Wert in einem KV-Shop ist der effizienteste Weg, Lookups zu tun.

Im Gegensatz dazu, wenn Sie häufig die Daten durch einen von mehreren Spalten abfragen, Sie aka eine reichere Abfrage API für die Daten unterstützt, dann können Sie eine relationale Datenbank mögen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top