2016-04-18 10 views
0

Ich habe allen zugehört und gesagt, dass es besser ist, denselben Index für alle Benutzer anstelle eines Indexes pro Benutzer zu teilen. Also würde jeder Benutzer einen Alias ​​haben.Index pro Benutzer oder Index für alle Benutzer (verschiedene Schemas)?

Von da an habe ich immer vermutet, dass das aus mehreren Gründen die beste Lösung ist. Es kommt mir jedoch eine Situation, in der ich dir gerne helfen würde, die nächste Situation zu lösen.

ES ist eine schemaless Speicher-Engine. Nun, kein Problem, alles ist in Ordnung, bis mehrere Benutzer ihr Schema erstellen können.

Stellen Sie sich zum Beispiel vor, dass ein Softwareprodukt den Benutzern erlaubt, seine Dokumente zu markieren, und jedes Tag hat einen Namen und einen Typ. Also, Benutzer sagt, ich möchte meine Dokumente mit einem Tag project des Typs string kennzeichnen. Gleichzeitig könnte ein anderer Benutzer seine Dokumente markieren, indem er sie mit einem Tag project vom Typ number indiziert. Dann könnte ES Dokumente indizieren, die dieses Tag verwenden, indem ein Feld in einer Sammlung mit Name Tag des Typs String/Zahl ... (mein Server) erstellt wird Anwendung würde Dokumente mit diesem neuen Feld serialisieren).

User1: 
{ 
    "name": "" 
    "department": "" 
    "project": "xxx" <<<<<<<<<<<<<<<<< 
} 

User2: 
{ 
    "name": "" 
    "department": "" 
    "project": 1000 <<<<<<<<<<<<<<<<< 
} 

Also ich meine jeder Benutzer ist in der Lage, sein eigenes Schema zu haben.

Ich möchte Sie bitten, mir einen Ansatz zu liefern, der nur einen einzigen Index für alle Benutzer verwendet oder einen Index pro Benutzer verwendet.

Ich muss sagen, dass das meiste des Schemas für alle Benutzer ähnlich ist. So teilen alle Benutzer 95% eines ursprünglich bereitgestellten Schemas, dennoch wird jeder Benutzer in der Lage sein, neue Schemafelder hinzuzufügen ...

Ich hoffe, ich habe es gut erklärt.

+0

Ich muss zugeben, dass ich ES nicht kenne, also nur ein paar allgemeine Gedanken: Wenn Benutzer gleichermaßen benannte Tags mit unterschiedlichen Typen bereitstellen, wie erstellt ES dann den Index? Wird es alle Werte enthalten - in Ihrem Beispiel Strings * und * Zahlen? Wenn zwei Benutzer gleichermaßen typisierte und benannte Tags bereitstellen, stellt ES Mittel bereit, um nur die Tags eines bestimmten Benutzers zu erhalten?Stellen Sie sich vor, dass Benutzer 1 Dokumente von Benutzer 2 findet, die zufällig markiert sind, so dass sie mit dem Suchmuster des ersten Benutzers übereinstimmen. Darf ich annehmen, dass dies nicht erwünscht ist? – Aconcagua

Antwort

0

Wenn Ihre Benutzer in der Lage sind, ihre eigenen Felder zu erstellen (mit dem gleichen Namen, aber potenziell unterschiedlichen Typen, also String vs Integer), ist es am besten, einen Index pro Benutzer zu haben mit ES 2.0 oder höher.

Konkret, ab ES 2.0, zwei Felder mit dem gleichen Namen, aber unterschiedlichen Einstellungen (Diff-Typ, Diff-Analysator usw.) in zwei verschiedenen Mapping-Typen des gleichen Index is not allowed.

+0

Hat dies geholfen? Brauchen Sie mehr Informationen? – Val

0

Zusätzlich zu Vals Antwort, lassen Sie mich Ihnen einen allgemeinen Ratschlag geben: Ja, bedenken Sie alle, aber sorgfältig, vor allem, wenn es so allgemein gegeben ist. Was im Allgemeinen eine gute Praxis ist, kann immer noch nicht anwendbar oder zumindest nicht für den speziellen Fall geeignet sein. Wenn Sie gute Gründe haben, der guten Praxis nicht zu folgen, tun Sie es!

Beispiel: Ich nehme an, dass es nicht erwünscht ist, dass Benutzer A Dokumente anderer Benutzer (B, C, ...) findet, nur weil sie die Suchkriterien von Benutzer A erfüllen. Vorausgesetzt, dass ES nicht selbst entsprechende Mittel zur Verfügung stellt, würde ein globaler Index eine Menge zusätzlicher Arbeit erfordern, um die Tags eines bestimmten Benutzers zu identifizieren (z. B. jeden Tag-Typ außer String zu deaktivieren, jedem Tag-Wert den Benutzernamen und a Trennzeichen - das müsste möglicherweise im Benutzernamen verworfen werden, wenn dort erlaubt - und die ganze Zeit mit dieser Erweiterung umgehen. In diesem speziellen Fall wäre es sogar viel einfacher/pragmatischer, einen Index pro Benutzer zu verwenden, selbst wenn ein globaler Index erlaubt wäre.

Verwandte Themen