1. 程式人生 > >Apache Geode/GemFire入門(2)-基本概念和模組

Apache Geode/GemFire入門(2)-基本概念和模組

使用持久化

GemFire支援無共享儲存持久化。每一個VM寫入他們的region data到自己的磁碟檔案中。

People region來說,每一個region將要寫入整個的region到自己的磁碟檔案中。而post region每一份拷貝都將要存在兩個不同的peer中。

71887ce002f7a4b7ea9b296480b869e03bde9518

當你重啟持久化成員,你需要呼叫cacheserver start並行地在每個伺服器。

原因是GemFire保證了你完整的資料被在VM重啟的時候被恢復。每一個VM只能持久化他自己的post部分。每一個GemFire VM等待直到所有的posts都可用。這阻止你看一個不完全的post region檢視。

其他的特性

這有一些其他的GemFire特性你能夠用來擴充套件這個例子。

GemFire快速序列化

在這個例子中,PostID和Profile類實現了java.io. Serializable.但是有些時候java的序列化是低效的,序列化使用了反射機制來使域物件序列化。序列化物件寫入了整個類名和域名到輸出流。GemFire提供了更高效的序列化機制,你能使用它來提高序列化效能。在java c++和c#客戶端共享資料更簡單(這個真的很強大)。

Locator冗餘

在這個例子中,我們只使用了一個簡單的locator,能夠引起SPOF。在生產環境中,我們至少使用兩個locator。Locators屬性接受了一個locator列表。

執行查詢

假設你想要顯示所有的people。GemFire支援query region OQL。

持續查詢

在這個例子中客戶端註冊interest更新進入people region使用正則表示式。你也能夠註冊更新使用OQL語句。例如,你能為特定使用者註冊所有的posts。

網格程式設計模型

預設情況下,posts被指定到不同的peers基於key的雜湊碼。那就意味著沒有哪一個post到哪一個server。如果你需要做什麼東西從一個特定的使用者那裡。比如執行拼音檢查你必須訪問不同的peer中的post。通過使用者名稱來組織這些posts是高效的,這樣拼寫檢查能夠在單一的VM上來執行,GemFire通過PartitionResolver來做這個事情。Partition Resolver讓你返回一個值來指定一個鍵值屬於哪個邏輯組。在這個例子中,PartitionResolver能夠返回PostID的author field。他能夠告訴GemFire放所有的post在相同的VM和相同的author上。

一旦posts被邏輯地組團。你需要執行你的拼寫檢查在儲存posts上的VM。GemFire傳遞功能到peers的子集上。這些功能在peers的子集上並行執行。執行拼寫檢查功能

SpellingCheck spellcheck = new SpellingCheck(); //implements Function
Set<String> authors = new HashSet<String();
authors.add("Ethan");
FunctionService.onRegion(people).withFilter(authors).execute(spellcheck);

多地域 WAN 閘道器

如果你有多個數據中心在遠端,處於不同位置的GemFire Peers之間的同步複製可能會導致太多的延遲。GemFire提供了WAN 閘道器,允許兩個和更多的遠端站點非同步傳送更新。使用閘道器很多的更新立即被髮送到來提高吞吐能力

快取writer和loader

如你所見,在一個條目被改變之後,一個CacheListener 回撥函式被呼叫。在一個條目被更新之前CacheWriter回撥函式被呼叫。你能夠阻塞更新或者傳送更新到其他的系統在cachewriter中。你能夠新增CacheLoader回撥到一個region來獲取或者生成一個值,如果他不在快取中,當get被呼叫。

清除和超時

GemFire提供了完全的支援對於eviction 和expiration在快取中。你能夠限制一個region的大小來接受特定的條目或者特定的空間大小。你能配置region在一定時間之後條目超時或者簡單地清除條目當你的堆疊滿員的時候。

你也能夠配置region條目溢位到磁碟,而不是完全地丟掉它。

原文地址:https://yq.aliyun.com/articles/11223#