it-swarm.com.de

NoSQL vs Other SQL Drupal Setups

Was sind die Vorteile von NoSQL (ex MongoDB) gegenüber MySQL, PostGRE SQL oder MSSQL in Drupal? Werden die Vorteile durch die einfache Verwendung des Speichers erzielt oder muss eine Drupal - Konfiguration geändert werden?

14
Kevin

Mit MongoDB können die meisten oder alle Ihre Entitäten in einem schnellen, dokumentenorientierten Speicher gespeichert werden. Diese Art von Speicher lässt sich viel besser skalieren als der Standard-SQL-basierte Speicher, den wir in Drupal Core (der auf einem Schema "eine Tabelle pro Feld" basiert) haben).

Im aktuellen Status von Drupal 7) hätten Sie:

  • Die Basistabelle der in SQL gespeicherten Entität (dh die Benutzertabelle, die Knotentabelle usw.)
  • Alle in SQL gespeicherten Felder
  • Die Eigenschaften der Entitäten aus ihren Basistabellen wurden in MongoDB dupliziert

Dies ermöglicht eine schnelle Abfrage der Entitäten in MongoDB und die Möglichkeit, komplexe Indizes hinzuzufügen, die von keiner Opensource SQL-Datenbank unterstützt werden (einschließlich indizesübergreifender Indizes). Gleichzeitig verlieren Sie nicht die Interoperabilität, da die Basistabelle der Entität weiterhin in SQL gespeichert ist und daher von Modulen verbunden werden kann, die nur SQL-fähig sind (wie Flag).

Diese Art der schnellen Abfrage ist dank des EntityFieldQuery-Mechanismus verfügbar, mit dem Abfragen zu Entitäten, ihren Eigenschaften und Feldern auf abstrakte Weise erstellt werden können. Die Standardimplementierung im Kern übersetzt diese Abfragen in SQL, aber das MongoDB-Modul verfügt über eine voll funktionsfähige Implementierung, die diese Abfragen von MongoDB direkt erfüllen kann.

Dank des EntityFieldQuery-Backends für Ansichten können Sie diese Leistung mithilfe der gewohnten Tools problemlos nutzen. Der einzige Nachteil ist, dass Beziehungen nicht unterstützt werden (in der Praxis werden sie jedoch ohnehin selten benötigt - und dies kann umgangen werden, indem zusätzliche Daten in das Entitätsobjekt verschoben und als zusätzliche Eigenschaften der Entität verfügbar gemacht werden).

Kurz gesagt, sobald die Abfrageleistung ein Problem in Ihrem Projekt darstellt, das auftritt, sobald Sie über einen signifikanten Datensatz verfügen (beispielsweise ab einigen Zehntausenden von Entitäten für einen bestimmten Entitätstyp), ist MongoDB ein Nettogewinn für sehr sehr wenige Nachteile. Sehr empfehlenswert.

13
Damien Tournoud

MongoDB und ähnliches sind so konzipiert, dass strukturierte (hierarchische) Daten relativ flexibel gespeichert werden.

Zum Beispiel erhält in Drupal 7 Bei Verwendung von field_sql_storage Jedes Feld seine eigenen Tabellen. Wenn Sie einem Inhaltstyp 10 Felder hinzufügen, erhalten Sie 10 Tabellen in Ihrer Datenbank. Wenn Sie diesen Knoten laden, führt field_sql_storage Eine Abfrage pro Feld und pro Knoten aus (oder mehrere Knoten, wenn Sie node_load_multiple Verwenden).

Wenn Sie mongodb_field_storage verwenden, können Sie alle Felder eines Knotens in einem einzigen Dokument speichern und mit einer einzigen Abfrage abrufen.

Sie können auch andere Dinge wie Watchdog, Sitzungen, Cache und Blöcke in MongoDB speichern.

Sie benötigen MySQL jedoch weiterhin, MongoDB ersetzt es nicht (nur für bestimmte Teile).

Ein weiterer Vorteil ist, dass es mit MongoDB einfacher zu skalieren ist. Sie können einem Cluster viele Server hinzufügen, um die Daten zwischen ihnen zu teilen.

7
Berdir

Die Vorteile haben Nachteile.

Drupal als Ganzes kann nicht auf MongoDb umgestellt werden, daher müssen Sie zwei Datenbanken unterstützen und sicherstellen, dass sie gut zusammenarbeiten.

Viele Module können nicht mit Mongodb arbeiten, sodass Sie die Interoperabilität verlieren.

Wenn Sie keinen dringenden Bedarf haben (da ein Teil Ihres Systems nicht mit der Anzahl der Anforderungen/oder der Datenmenge fertig wird), würde ich nicht wechseln. Und selbst wenn Sie sich den Grenzen nähern, sollten Sie vor dem Umschalten die Hardware auf das Problem werfen oder die Optimierung vornehmen.

Ich dachte, ich hätte das schon einmal beantwortet, es gibt ein fast doppelt auf SO

5
Jeremy French