Ich habe eine Anwendung, die mit dem MVC-Muster entwickelt wurde, und ich möchte jetzt mehrere Modelle davon indizieren, das heißt, jedes Modell hat eine andere Datenstruktur.
Ist es besser, mehrere Indizes zu verwenden, einen für jedes Modell oder einen Typ innerhalb des gleichen Index für jedes Modell? Beide Möglichkeiten erfordern meiner Meinung nach auch eine andere Suchanfrage. Ich habe gerade damit angefangen.
Gibt es leistungsbezogene Unterschiede zwischen beiden Konzepten, wenn der Datensatz klein oder groß ist?
Ich würde die 2. Frage selbst testen, wenn mir jemand einige gute Beispieldaten für diesen Zweck empfehlen könnte.
Beide Ansätze haben unterschiedliche Implikationen.
Angenommen, Sie verwenden die Standardeinstellungen von Elasticsearch. Wenn Sie für jedes Modell einen Index haben, erhöht sich die Anzahl Ihrer Shards erheblich, da für einen Index 5 Shards verwendet werden, für 5 Datenmodelle 25 Shards. Während 5 Objekttypen in einem Index vorhanden sind, werden noch 5 Shards verwendet.
Auswirkungen für jedes Datenmodell als Index:
Auswirkungen für jedes Datenmodell als Objekttyp innerhalb eines Index:
Wenn Sie fragen, was ist zu viel Daten gegenüber kleinen Daten? Normalerweise hängt es von der Prozessorgeschwindigkeit und dem RAM Ihrer Hardware ab, von der Datenmenge, die Sie in jeder Variablen in Ihrem Mapping für Elasticsearch speichern, und von Ihren Abfrageanforderungen. Durch die Verwendung vieler Facetten in Ihren Abfragen wird Ihre Antwortzeit erheblich verlangsamt. Es gibt keine einfache Antwort darauf und Sie müssen entsprechend Ihren Bedürfnissen Benchmarking durchführen.
Obwohl Jonathans Antwort zu dieser Zeit korrekt war, hat sich die Welt weiterentwickelt und es scheint, dass die Leute hinter ElasticSearch einen langfristigen Plan haben, die Unterstützung für mehrere Typen einzustellen:
Wenn Sie also nur einen einzigen Typ pro Index verwenden, wird die Aktualisierung auf ElasticSearch 6.x für neue Projekte einfacher.
Jonathans Antwort ist großartig. Ich möchte nur ein paar andere Punkte hinzufügen:
Die beiden obigen Antworten sind großartig!
Ich füge ein Beispiel für mehrere Typen in einem Index hinzu. Angenommen, Sie entwickeln eine App, um nach Büchern in einer Bibliothek zu suchen. Es gibt einige Fragen, die Sie dem Bibliotheksbesitzer stellen müssen.
Fragen:
Wie viele Bücher möchten Sie einlagern?
Welche Bücher werden Sie in der Bibliothek aufbewahren?
Wie suchst du nach Büchern?
Antworten:
Ich habe vor, 50 bis 70 k Bücher zu speichern (ungefähr)
Ich werde über 15 -20-k-technische Bücher (Informatik, Maschinenbau, Chemieingenieurwesen usw.), 15.000 historische Bücher, 10.000 medizinische Bücher verfügen. 10 k von sprachbezogenen Büchern (Englisch, Spanisch usw.)
Suche nach Autoren, Vorname, Name des Verfassers, Erscheinungsjahr, Name des Herausgebers. (Dies gibt Ihnen die Idee, welche Informationen Sie im Index speichern sollten.)
Aus den obigen Antworten können wir sagen, dass das Schema in unserem Index so aussehen sollte.
// Dies ist nicht die genaue Zuordnung, nur für das Beispiel
"yearOfPublish":{
"type": "integer"
},
"author":{
"type": "object",
"properties": {
"firstName":{
"type": "string"
},
"lastName":{
"type": "string"
}
}
},
"publisherName":{
"type": "string"
}
}
Um dies zu erreichen, können wir einen Index namens Books erstellen und verschiedene Typen haben.
Index: Buch
Typen: Wissenschaft, Kunst
(Oder Sie können viele Arten erstellen, z. B. Technologie, Medizin, Geschichte, Sprache, wenn Sie viel mehr Bücher haben.)
Beachten Sie hierbei, dass das Schema ähnlich ist, die Daten jedoch nicht identisch sind. Und die andere wichtige Sache ist die Gesamtdatenmenge, die Sie speichern.
Hoffen Sie, dass die oben genannten Punkte hilfreich sind, wenn Sie sich für verschiedene Typen in einem Index entscheiden. Wenn Sie ein anderes Schema verwenden, sollten Sie einen anderen Index in Betracht ziehen. Kleiner Index für weniger Daten. großer Index für Big Data :-)