2014-09-11 30 views
0

我們計劃在主/從模式下使用Infinispan 6.x,並將所有寫入和讀取操作指向一個節點;其他節點僅使用異步複製作爲備份。確保使用異步的本地寫入Infinispan 6.x

在ASYNC複製模式,Infinispan的本地寫似乎是異步爲好,即put(x)緊接着get(x)在同一節點上,使get()返回null。 (請參閱this discussion。)

我們有一個用例,其中客戶端強制put(x),然後在後續請求中使用get(x)。我們如何確保在第二次請求到達時,條目位於本地數據容器(本地地圖)?出於性能原因,SYNC模式不存在問題。

回答

0

您使用術語當地緩存有點不正確 - 本地是不引起其他節點的任何複製的模式之一。您要確保條目位於數據容器(這是Infinispan保存條目的「本地」映射)。

無論如何,如果put()的節點與此主鍵的主節點節點不同,則不能這樣做。有幾種方法可以實現,比如KeyAffinityService,但這些並不完全是防彈的 - 在生成密鑰和使用密鑰之間,拓撲更改有一定的機會,所以你不能依賴它。

即使在SYNC節點中,您也可以調用putAsync(),它將寫入委託給另一個線程並返回未來。

+0

謝謝,我重申了這個問題,以避免術語混淆。 我正在使用複製(而不是分配) - 在這種情況下,是否仍然存在主要所有者的概念? – 2014-09-11 14:09:21

+0

是的,一個節點始終是每個條目的主要節點。這個單點需要具有單一鎖定非事務模式,寫入發送給主要所有者,主要所有者鎖定條目並將更新發送到所有備份,並且在獲得ack後,解鎖條目並向發起者發送ack。 – 2014-09-12 21:03:55

+0

如果您發現其他信息(對於非交易模式,交易有點不同),它是來自Infinispan <5.2的過期文檔(如果我沒有記錯它在哪個版本中被更改) - 在這種情況下,請爲文檔。 – 2014-09-12 21:05:32