2016-03-28 88 views
0

填充Hazelcast數據網格的最快方式是什麼?通過文檔閱讀中,我可以看到幾個變種:​​填充數據網格的最快方式Hazelcast

  1. 使用多線程和IMap.set
  2. 使用多線程和IMap.putAll
  3. 使用分佈式執行,以開始填充所有參與者的網格。

我的性能基準測試顯示IMap.putAll比IMap.Set快。但是在Hazelcasty文檔中指出IMap.putAll不會保證所有東西都會被原子地插入。

有人可以澄清一下有關使用數據填充數據網格的最快方式是什麼?

3號變體是否好?

回答

1

我會看到相同的三個選項。無論如何,正如你所提到的,選項二不能保證所有東西都以原子方式放入地圖,但如果你只是加載數據並等待所有線程使用IMap :: putAll完成加載數據,那麼你應該沒問題。

除此之外,IMap :: set將是另一種選擇。無論如何你都想多線程加載過程。我會玩一些不同的線程號碼,通常建議客戶端加載數據以保持節點免費進行存儲操作。

我個人從來沒有對你的第三個選項進行基準測試,無論如何它也是可能的。只是不確定這是值得的額外工作。

你想加載多少數據,你擔心它可能會很慢?你知道加載速度很慢嗎?你使用Java序列化(這是一個巨大的性能殺手)?你是否使用索引(這些索引必須在生成數據時生成)?

通常有很多優化應用於加速,不僅是數據加載,還有正常操作。

+0

hei謝謝你的回答。我多少想知道是否有ant point testing optionopinion 3.如果有第四種選擇。關於你的問題,外包團隊聲稱他們的表現比商店更差。到目前爲止,我已經看到他們使用IMAP :: put而不是IMAP :: putAll。序列化看起來不錯。他們正在春季批量推廣paralel.I將檢查更多今天。 –

+0

你好,我剛剛看到了源代碼。它使用Transactional Map,並且TransactionAlMap的實現中缺少putAll方法。這是如何改變這些事情的?我們怎樣才能將大量數據放入此事務性Map? –

+0

你好,使用TransactionalMap時會出現一個有趣的副作用。性能高度依賴於MAP中插入的對象的數量。當插入的塊大小爲1000時,速度明顯低於塊大小250.爲什麼?有什麼方法可以改進? –