Bei dieser Frage geht es darum, eine architektonische Entscheidung zu treffen, bevor die Details des Experimentierens und der Implementierung untersucht werden. Es geht um die Eignung von Elasticsearch gegenüber MongoDB in Bezug auf Skalierbarkeit und Leistung für einen bestimmten Zweck.
Hypothetisch gesehen speichern beide Datenobjekte mit Feldern und Werten und ermöglichen das Abfragen dieses Objektkörpers. Vermutlich ist es für beide geeignet, Teilmengen der Objekte nach ad-hoc ausgewählten Feldern herauszufiltern.
Meine Anwendung dreht sich um die Auswahl von Objekten nach Kriterien. Es würde Objekte auswählen, indem es gleichzeitig nach mehr als einem Feld filtert, anders ausgedrückt, seine Abfragefilterkriterien würden typischerweise irgendwo zwischen 1 und 5 Feldern umfassen, in einigen Fällen möglicherweise mehr. Während die als Filter ausgewählten Felder eine Teilmenge einer viel größeren Anzahl von Feldern wären. Stellen Sie sich etwa 20 vorhandene Feldnamen vor, und jede Abfrage ist ein Versuch, die Objekte nach wenigen Feldern aus diesen insgesamt 20 Feldern zu filtern (es können weniger oder mehr als 20 vorhandene Feldnamen vorhanden sein. Ich habe diese Zahl nur verwendet, um das Verhältnis von zu demonstrieren Felder zu Feldern, die in jeder diskreten Abfrage als Filter verwendet werden). Die Filterung kann durch das Vorhandensein der ausgewählten Felder sowie durch die Feldwerte erfolgen, z. B. durch Herausfiltern von Objekten mit Feld A, und ihr Feld B liegt zwischen x und y.
Meine Anwendung wird diese Art der Filterung kontinuierlich durchführen, während es keine oder nur eine sehr geringe Konstante dafür gibt, welche Felder zu irgendeinem Zeitpunkt für die Filterung verwendet werden. Vielleicht müssen in Elasticsearch Indizes definiert werden, aber vielleicht ist die Geschwindigkeit auch ohne Indizes mit der von MongoDB vergleichbar.
Laut den Daten, die in den Speicher gelangen, gibt es keine besonderen Details dazu. Die Objekte würden nach dem Einfügen fast nie geändert. Möglicherweise müssten alte Objekte gelöscht werden. Ich möchte davon ausgehen, dass beide Datenspeicher das Löschen von Inhalten intern oder durch eine von einer Anwendung vorgenommene Abfrage ablaufen lassen. (Weniger häufig müssen Objekte, die zu einer bestimmten Abfrage passen, ebenfalls gelöscht werden.)
Was denken Sie? Und haben Sie diesen Aspekt experimentiert?
Ich interessiere mich für die Leistung und Skalierbarkeit jedes der beiden Datenspeicher für diese Art von Aufgabe. Dies ist die Art einer architektonischen Entwurfsfrage, und Details zu geschäftsspezifischen Optionen oder Abfrage-Eckpfeilern, die eine gute Architektur ermöglichen sollen, sind als Demonstration eines vollständig durchdachten Vorschlags willkommen.
Vielen Dank!