Wie sollte ich meine Daten speichern? Ein Vergleich von Datenbank, Solr, …

Schemalose Datenbank

Ein bekannter Vertreter dieser Gattung ist MongoDB, ein „NoSQL“, schemafreies Datenverwaltungssystem. Seine Merkmale sind:

  • Dokumente ohne festes Schema
  • Einfache Skalierbarkeit

Datensätze sind hier nicht mehr in Tabellen organisiert, sondern als sogenannte Dokumente, die beliebig erweitert werden können. Im PHP-Code haben wir also ebenfalls keine exakten Objekte mehr, sondern müssen uns mit __get() Magie behelfen. Dafür sind wir aber frei darin, was wir unter einem Datensatz tatsächlich abspeichern.

Beim Speichern neuer Daten versucht das System abzuschätzen wie viel Speicher wohl benötigt wird. Dazu dienen vor allem die bisherigen Dokumente als Anhaltspunkt. Insbesondere wenn für ein Update nicht mehr genügend Speicher reserviert ist, muss der komplette Datensatz verlegt werden. Damit leidet die Schreibgeschwindigkeit vor allem bei Updates. Der Speicherverbrauch ist ebenfalls suboptimal, da immer etwas Platz für zukünftige Vergrößerungen vorgehalten wird. Das wird immer ineffizienter je unterschiedlicher die Dokumente sind.

Suchen haben die gleichen Probleme wie relationale Datenbanken. Auch hier benötigen wir einen eindeutigen Schlüssel um die Dokumente anzusteuern.

Da hier nicht mehr in starren Tabellen gedacht wird, wird die horizontale Skalierung vereinfacht. Daten, die zusammen gehören, befinden sich im selben Dokument und können als Gesamtpaket auf einem Cluster-Server verwaltet werden.

Gründe dagegen

  • Für den häufigsten Use-Case keine eindeutigen Schlüssel möglich
  • Volltextsuche
  • Sehr viele „lose“ Daten (z. B. Logs)

Eine Stolperfalle gerade für Umsteiger von relationalen Systemen, sind die Grenzen eines Dokumentes. Natürlich stehen Logeinträge in Verbindung zum Benutzer, aber benötige ich sie wirklich für normale Operationen?

Weiter mit einer Graphen-Datenbank >>