2016-12-13 52 views
1

我有一個包含五臺服務器(例如A,B,C,D和E)的Ignite數據網格。一個分區的緩存已經在這些五臺服務器分佈與設置爲1將緩存項放入特定的Ignite服務器

我要存儲在該分區的高速緩存億項的備份數。但是,我想控制緩存條目到Ignite服務器的分區。

是否有可能,我可以直接把我點燃客戶端把一個特定的服務器(比如E)對高速緩存條目?

回答

1

做到這一點的唯一方法是實現自己的Affinity Function,而不是提供開箱即用的人。但是,我會讓您重新考慮這種方法,因爲它不具備可擴展性。包含在Ignite中的相似性功能旨在提供任何節點集上的均勻分佈,因此您可以根據需要動態擴展和縮小。你的方法不夠靈活。

此外,我建議你通過文檔頁面去了解Affinity Collocation。很可能這會給你提示如何以更好的方式實現你的邏輯。

最後,你可以提供一些關於你的用例的更多細節嗎?我會很樂意就如何解決這個問題提供一些建議。

+0

我實際上正在嘗試使用Apache Ignite創建布隆過濾器,爲此我需要一個1000億位分佈式數組。由於Ignite不支持分佈式數組數據結構,因此我試圖將數組分解爲小數位集並將它們存儲爲緩存條目。我想控制分配,因爲它可以幫助我確定哪個服務器具有特定的緩存條目,並將計算作業(使用Ignite Compute網格)指向該特定服務器。有什麼辦法讓我可以得到一個特定的密鑰服務器的節點UUID? –

+0

我剛剛發現可以使用函數CacheConfiguration()。getAffinityFunction()。partition(Object key)來獲取特定密鑰所在的分區。你現在可以告訴我,是否有可能找到具有此分區的Ignite服務器的UUID? –

+0

這應該通過可以通過Ignite.affinity()方法獲取的Affinity API來完成。但要發送並置封閉,您可以簡單地使用IgniteCompute.affinityRun()和IgniteCompute.affinityCall()方法。 –