MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB + Elasticsearch oder nur Elasticsearch?

Apropos Argumente zu verwenden Mongo statt/zusammen mit ES:

  1. Benutzer-/Rollenverwaltung.

    • Integriert in MongoDB. Erfüllt vielleicht nicht alle Ihre Bedürfnisse, ist vielleicht irgendwo ungeschickt, aber es existiert und wurde vor ziemlich langer Zeit implementiert.
    • Das Einzige, was für Sicherheit in ES sorgt, ist shield . Aber es wird nur für Gold/Platinum-Abonnements für Produktionszwecke geliefert.
  2. Schema

    • ES ist schemalos, aber es baut auf Lucene auf und in Java geschrieben . Die Kernidee dieses Tools – Indexieren und Suchen von Dokumenten – und diese Arbeitsweise erfordert Indexkonsistenz. Am Backend sollten alle Dokumente in flachem lucene eingepasst werden index, was ein gewisses Verständnis dafür erfordert, wie ES mit Ihren verschachtelten Dokumenten und Werten umgehen sollte und wie Sie Ihre Indizes organisieren sollten, um ein Gleichgewicht zwischen Geschwindigkeit und Vollständigkeit/Konsistenz der Daten zu wahren. Wenn Sie mit ES arbeiten, müssen Sie ständig einige Dinge über das Schema im Auge behalten. Das heißt:Da Sie fast alles in ES indizieren können, ohne die entsprechende Zuordnung im Voraus zu erstellen, kann ES die Zuordnung im Handumdrehen "erraten", aber manchmal falsch machen, und manchmal ist die implizite Zuordnung böse, da sie, sobald sie einmal vorhanden ist, nicht mehr geändert werden kann w /o Gesamten Index neu indizieren. Es ist also besser, ES nicht als schemalosen Speicher zu behandeln, da Sie einige Zeit auf einen Rechen treten können (und das wird Schmerz sein :) ), aber behandeln Sie es lieber als schemaintensiv, zumindest wenn Sie mit Dokumenten arbeiten, die in konkrete Felder aufgeteilt werden können.
    • Mongo hingegen kann fast alles, was Sie hineingeben, "kauen und keine Krümel hinterlassen". Und die meisten Ihrer Abfragen werden gut funktionieren, bis Sie sich daran erinnern, wie Mongo mit Ihren Daten aus der JavaScript-Perspektive umgeht. Und da JS schwach typisiert ist, können Sie mit einem wirklich schemalosen Workflow arbeiten (natürlich, wenn Sie einen solchen benötigen)
  3. Umgang mit nicht tabellenähnlichen Daten.

    • ES ist darauf beschränkt, Daten zu verarbeiten, ohne sie in den Suchindex aufzunehmen. Und diese Lösung ist gut genug, wenn Sie einige zusätzliche Daten speichern und abrufen müssen (im Vergleich zu Daten, die Sie durchsuchen möchten).
    • MongoDB unterstützt gridFS . Dadurch können Sie große Datenmengen hinter derselben Schnittstelle verarbeiten. Das heißt, Sie können binäre Daten in Mongo speichern und aus Ihrer Code-Perspektive innerhalb derselben Schnittstelle abrufen.