2011-12-05 60 views
1

我有一個帶有2個節點和持久性DB的hazelcast集羣。我一個接一個地開始兩個節點。第一個節點從數據庫讀取實體並構建相應的映射(實體映射)。在啓動第二個節點之後,EntityMapStore.store()方法會定期調用(在第二個節點上)很多次。 我只是想知道,這應該怎麼發生,因爲開始後我沒有把任何東西放到地圖中。還是我做錯了什麼?除了調用put操作之外,何時會保留Hazelcast地圖元素?

的hazelcast.xml的相應部分看起來像:

<map name="entityMap"> 
     <backup-count>1</backup-count> 
     <map-store enabled="true"> 
      <class-name>EntityMapStore</class-name> 
      <write-delay-seconds>1</write-delay-seconds> 
     </map-store> 
    </map> 
+0

這也提出了數據如何平衡的問題。由於數據存儲在數據庫中,現在數據如何分佈?雖然數據是通過寫入的,但在一個節點上還有一個內存副本,另一個節點上有備份副本? –

回答

4

不是,你沒有做錯什麼。由於您有write-delay-seconds > 0,因此當條目遷移到第二個節點時,會在第二個節點上調用store()這些條目。這是目前的行爲,但您可能需要create an issue,以便Hazelcast團隊可以通過不針對已遷移的未刪除條目調用store()來增強此行爲。

+0

感謝您的回答。正如你所說,如果我在第二個節點上設置write-delay-seconds = 0, store()將不會在第二個節點上調用。但是,爲什麼?我曾認爲store()在每個實體遷移後仍然會被調用。 –

+0

因爲如果write-delay-seconds = 0,這意味着store()已經在第一個節點上調用。沒有必要在第二個節點上調用它。 Hazelcast假定數據存儲是集中的(比如sql數據庫)。 –

相關問題