2016-12-13 2 views
1

Ich habe ein Ignite Datengrid von fünf Servern (sagen wir A, B, C, D und E). Ein partitionierter Cache wurde auf diese fünf Server verteilt, wobei die Anzahl der Backups auf 1 festgelegt wurde.Caching-Einträge auf bestimmten Ignite Server setzen

Ich möchte 100 Millionen Einträge in diesem partitionierten Cache speichern. Aber ich möchte die Partitionierung meiner Cache-Einträge auf die Ignite-Server steuern.

Ist es möglich, dass ich meinen Ignite-Client anweisen kann, einen Cache-Eintrag auf einen bestimmten Server zu stellen (zB E)?

Antwort

1

Der einzige Weg, dies zu tun, ist die Implementierung Ihrer eigenen Affinity Function anstelle der mitgelieferten aus der Box. Ich würde Sie jedoch dazu ermutigen, diesen Ansatz zu überdenken, da er nicht skalierbar ist. Affinity-Funktionen, die in Ignite enthalten sind, sorgen für eine gleichmäßige Verteilung auf jeder Gruppe von Knoten, sodass Sie dynamisch nach oben und unten skalieren können, wenn Sie diese benötigen. Ihr Ansatz ist viel weniger flexibel.

Auch ich würde Ihnen empfehlen, Dokumentationsseite über Affinity Collocation zu gehen. Sehr wahrscheinlich gibt dies Ihnen Hinweise, wie Sie Ihre Logik besser umsetzen können.

Und finally, können Sie mehr Details über Ihren Anwendungsfall geben? Ich werde Ihnen gerne einen Rat geben, wie Sie es angehen können.

+0

Ich versuche tatsächlich, Apache Ignite zu verwenden, um einen Bloom-Filter zu erstellen, für den ich ein verteiltes Array von 100 Milliarden Bits benötige. Da Ignite eine verteilte Array-Datenstruktur nicht unterstützt, versuche ich, das Array in kleine Bit-Sets aufzuteilen und sie als Cache-Einträge zu speichern. Ich wollte die Distribution steuern, da sie mir bei der Entscheidung, welcher Server einen bestimmten Cache-Eintrag hat, geholfen hätte und meine Rechenjobs (mit dem Ignite Compute-Raster) an diesen bestimmten Server weitergeleitet hätte. Gibt es eine Möglichkeit, die Knoten-UUID eines Servers mit einem bestimmten Schlüssel zu erhalten? –

+0

Ich habe gerade festgestellt, dass es möglich ist, die Partition, auf der ein bestimmter Schlüssel vorhanden ist, mit der Funktion CacheConfiguration() zu erhalten. GetAffinityFunction() .partition (Objektschlüssel). Können Sie mir jetzt sagen, dass es möglich ist, die UUID des Ignite-Servers mit dieser Partition zu finden? –

+0

Dies sollte durch 'Affinity' API erfolgen, die über' Ignite.affinity() 'Methode erworben werden kann. Um jedoch einen zusammengeschlossenen Abschluss zu senden, können Sie einfach die Methoden 'IgniteCompute.affinityRun() 'und' IgniteCompute.affinityCall() 'verwenden. –