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?
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?
Antworten:
Mit MongoDB können Sie die meisten oder alle Ihre Entitäten schnell und dokumentenorientiert speichern. Diese Art von Speicher skaliert viel besser als der Standard-SQL-basierte Speicher in Drupal Core (der auf einem Schema "Eine Tabelle pro Feld" basiert).
Im aktuellen Status von Drupal 7 hätten Sie:
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 tabellenübergreifender Indizes). Gleichzeitig verlieren Sie nicht die Interoperabilität, da die Basistabelle der Entität weiterhin in SQL gespeichert ist und daher von Modulen verknüpft werden kann, die nur SQL unterstützen (wie z. B. Flag).
Diese Art der schnellen Abfrage ist dank des EntityFieldQuery-Mechanismus möglich, mit dem Abfragen zu Entitäten, ihren Eigenschaften und ihren Feldern auf abstrakte Weise erstellt werden können. Die Standardimplementierung in Core übersetzt diese Abfragen in SQL. Das MongoDB-Modul verfügt jedoch über eine vollständige Implementierung, die diese Abfragen von MongoDB direkt befriedigen kann.
Dank des EntityFieldQuery-Backends für Ansichten können Sie diese Leistung mit den gewohnten Tools auf einfache Weise nutzen. Der einzige Nachteil ist, dass Beziehungen nicht unterstützt werden (in der Praxis werden sie jedoch sowieso 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 beginnend mit einigen Zehntausenden von Entitäten für einen bestimmten Entitätstyp), ist MongoDB ein Nettogewinn für sehr sehr wenige Nachteile. Sehr empfehlenswert.
MongoDB und ähnliche Programme sind so konzipiert, dass strukturierte (hierarchische) Daten relativ flexibel gespeichert werden können.
Zum Beispiel erhält Drupal 7
bei der Verwendung field_sql_storage
jedes Feld seine eigenen Tabellen. Wenn Sie 10 Felder an einen Inhaltstyp anhängen, werden 10 Tabellen in Ihrer Datenbank gespeichert. Wenn Sie diesen Knoten laden, field_sql_storage
wird eine Abfrage pro Feld und pro Knoten (oder bei Verwendung mehrerer Knoten node_load_multiple
) ausgeführt.
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, Sessions, Cache, Blöcke in MongoDB speichern .
Sie benötigen weiterhin MySQL, MongoDB ersetzt es jedoch nicht (nur für bestimmte Teile).
Ein weiterer Vorteil ist, dass es mit einfacher ist die Skalierung MongoDB ist. Sie können einem Cluster mehrere Server hinzufügen, die die Daten gemeinsam nutzen.
Das Für und Wider.
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 die Interoperabilität verloren geht.
Ich würde nicht wechseln, es sei denn, Sie hätten ein dringendes Bedürfnis (ein Teil Ihres Systems kommt mit der Anzahl der Anfragen / oder der Datenmenge nicht zurecht). Und selbst wenn Sie anfangen, sich Grenzen zu nähern, werfen Sie einen Blick auf das Problem oder die Optimierung, bevor Sie wechseln.
Ich dachte, ich hätte das schon einmal beantwortet, es gibt ein fast doppeltes SO