2009-12-09 117 views
1

這是一個體繫結構問題。 我有一個擁有巨大內存的服務器,用作大對象緩存持有者的想法。客戶發送「動作」到這個服務器(像搜索人物,年齡< 13)。然後,這臺機器(使事情複雜化,讓這個服務器更多的實例以及爲每個實例分發Persons列表來保存一半的數據,並且這兩個實例都可以在查詢 - MapReduce樣式上工作)然後返回符合條件的人員。 其他「動作」將是一個特定的緩存刷新,或者說「更新人員id = 3以實例...」等。實現緩存服務器的體系結構問題

猜猜這是Oracle Coherence的最佳做法,但我想知道是否有人有其他開源解決方案或想法。

一個簡單的解決方案是將EhCache與Hibernate結合使用,但我不知道用什麼協議將它變成服務器(我將發送操作作爲「服務器」上的調用方法發送,而方法返回與查詢匹配的人員列表)。也許可以使用簡單的RMI。我還沒有確信,我想要一個更經過驗證的解決方案,一個框架,同時擁有故障轉移,自動發現和映射減少功能也不錯。我想我可以在我的EhCache解決方案上封裝GridGain並解決這個問題?這將是矯枉過正的(我可以堅持只有一個這個數據網格服務器的實例)。

其他選項將是兵馬俑。關鍵是我對Terracotta瞭解不多,只是你可以在實例之間共享數據。如果我將流程中的元素添加到分佈式緩存中,並且在另一個流程中存在緩存的本地副本,並且只有差異被複制?這對於每個進程都會查詢本地緩存並且速度非常快的事實都很好,但這也意味着客戶端進程中使用的內存很多。

那麼有人有什麼想法?

謝謝。

回答

1

由於簡單的解決方案,以一個簡單的Ehcache,我想我可以使用Hazelcast實現集羣awarness並調用「操作」 - Hazelcast

再次MapReduce的能證明趣味性爲一體的解決方案。這是非常有趣的,因爲他們說他們提供MapReduce並跟蹤數據的位置,這應該非常快。如果我們沒有兩臺以上的服務器,我不確定是否可以。

0

我認爲Terrastore是爲了解決這個問題而設計的,但是對Terrastore的訪問意圖是沒有進程的,而不是進程中的(你並不是特定的需要什麼類型的訪問)。

Terrastore是基於兵馬俑的OSS項目。

1

爲什麼你需要緩存?您在問題的第一段中描述的內容聽起來很像一個關係數據庫,其表格完全存儲在內存中。您是否有任何可擴展性要求,可能需要將數據分佈到集羣中的多個服務器上?

0

你也可以看看Redis。它有非常好的查詢語言。