2009-03-24 4 views
5

Es scheint einen großen Schub für Schlüssel/Wert-basierte Datenbanken geben, die ich glaube Memcache sein.Key-Value-basierte Datenbanken, kann mir jemand erklären, wie man sie praktisch benutzt?

ist der Wert in der Regel eine Art von Sammlung oder XML-Datei, die mehr meaningfull Daten halten würde?

Wenn ja, ist es in der Regel schneller Daten deserialisiert dann traditinally zu tun JOINS und wählt auf Tabellen, die eine Zeile basierend Ergebnismenge zurückgeben?

Antwort

3

Wie bei den meisten Dingen, "es kommt darauf an". Wenn die Joins relativ inkonsequent sind (dh eine kleine Anzahl von Joins auf gut verschlüsselten Daten) und Sie besonders komplexe Daten speichern, ist es möglicherweise besser, nur bei der komplexeren Abfrage zu bleiben.

Es ist auch eine Frage der Frische. In vielen Fällen besteht der Zweck vieler Verknüpfungen darin, sehr unterschiedliche Daten zusammenzuführen; das heißt, Daten, die in ihrer relativen Frische stark variieren. Es kann erhebliche Komplexität und Overhead hinzufügen, um eine Schlüssel-Wert-Paar-Tabelle synchronisiert zu halten, wenn ein kleines Stück der Daten über eine große Anzahl von Paaren aktualisiert wird. Systemkomplexität kann oft als eine Form von Leistungskosten angesehen werden; Die Zeit, das Risiko und die Kosten, um ein komplexes System zu ändern, ohne die Leistung zu beeinträchtigen, sind oft viel größer als ein einfaches.

Die beste Lösung ist immer Code, der so einfach funktioniert wie Sie können. In den meisten Fällen würde ich sagen, dass dies bedeutet, ein vollständig normalisiertes Datenbankdesign zu erstellen und den Mist daraus zu machen. Besuchen Sie Ihr Design nur nach Leistung wird ein offensichtliches Problem. Wenn Sie das Problem analysieren, wird es auch offensichtlich, wo die Probleme liegen und was getan werden muss, um sie zu beheben. Wenn es Joins reduziert, dann sei es so. Sie werden wissen, wann Sie es wissen müssen.

+0

Ich stimme nicht ganz mit dem "... schließen Sie den Mist daraus." Teil. Meine Erfahrung sagt mir, sollte sinnvoll gemacht werden. Zu viel Normalisierung ist fast immer eine schlechte Sache. –

2

Ich habe nicht viel Erfahrung mit Schlüssel/Wert dbs, also nehmen Sie, was ich sage mit einem Körnchen Salz.

Mit diesem gesagt, das erste, was ich hervorheben sollte, ist, dass memcached ist kein Schlüssel/Wert Datenbank. Eine Datenbank impliziert eine Art persistenten Speicher, den Memcached nicht hat. Memcached soll ein temporärer Speicher sein, um eine Abfrage in der tatsächlichen Datenbank zu speichern.

Anders als das, mein Verständnis ist, dass Sie nicht in der Lage sein Ihre RDBMS mit einem Schlüssel/Wert-Datenbank zu ersetzen. Sie eignen sich am besten für unstrukturierte Daten oder andere Daten, bei denen Sie möglicherweise nicht alle Attribute kennen, die gespeichert werden müssen. Wenn Sie stark strukturierte Daten speichern müssen, können Sie nicht viel besser als ein traditionelles RDBMS.

6

Was passiert ist, ist, dass einige wirklich, wirklich, wirklich große Websites wie Google und Amazon einen winzig kleinen Nische besetzen, wo ihre Datenspeicher- und Abrufanforderungen für jeden so unterschiedlich sind, sonst ist das eine neue Art von das Speichern/Abrufen von Daten wird angefordert. Ich bin mir sicher, dass diese Jungs wissen, was sie tun, sie sind sehr gut darin, was sie tun.

Aber dann wird dies aufgenommen und berichtet und verzerrt in "relationale Datenbanken sind nicht im Umgang mit Daten für das Web". Außerdem denken die Leser: "Hey, wenn relationale Datenbanken nicht gut genug für Amazon und Google sind, sind sie nicht gut genug für mich."

Diese Schlussfolgerungen sind beide falsch: 99,9% aller Datenbanken (einschließlich derer hinter Websites) sind nicht im selben Ballpark wie Amazon und Google - nicht in mehreren Größenordnungen. Für diese 99,9% hat sich nichts geändert, relationale Datenbanken funktionieren immer noch gut.

+0

Amen, Bruder! :-) – ObiWanKenobi

+0

Also meine Web-Anwendungen werden gut mit MySQL und (möglicherweise) Memcached funktionieren? –

+0

würde ich mir ja vorstellen, ja. Ich weiß nichts über Memcached, aber nachdem ich es gegoogelt habe, sehe ich, dass es einfach ein Mechanismus zum "Erinnern" von Werten ist, die einmal in einer Sitzung aus der Datenbank abgerufen wurden, anstatt immer wieder in die Datenbank zu gehen. Es hat nichts mit den Schlüssel/Wert-Datenbanken AFAICT zu tun. Ein solches Caching ist wahrscheinlich sinnvoll, wenn es sinnvoll eingesetzt wird: Verwenden Sie es nicht für Daten, die sich seit dem letzten Zugriff wahrscheinlich geändert haben (es sei denn, Sie interessieren sich nicht dafür). –

1

Sie können komplexe strukturierte Daten sein, die Deserialisierung benötigt. Sie können auch einfache Datensätze fester Größe sein, genau wie Ihr RDBMS. Teil des Vorteils ist, dass Sie diese Entscheidung selbst treffen können. Wenn Sie Ihre Datenbank optimieren, sind Sie nicht darauf beschränkt, was SQL tun kann.

Die Art, wie Sie fragen, klingt wie der Beitritt oder die Deserialisierung wird immer der Flaschenhals sein. Aber in jeder Datenbank sind die Dinge nie so einfach. Sie können denormalisierte Daten auch in Ihr RDBMS einfügen oder eine RDBMS-Schnittstelle über eine Schlüsselwertdatenbank schreiben, wenn Sie dies wirklich möchten.

Verwandte Themen