Hazelcast入门指南第1部分
介紹
我將在Hazelcast上做一個系列。 我從Twitter了解了該產品。 他們決定跟隨我,經過對他們所做工作的研究后,我決定跟隨他們。 我在推特上說,Hazelcast將是分布式密碼破解者的重要Struts。 這引起了一些興趣,我決定加入一個。 Hazelcast的副總裁開始與我聯系,我們認為雖然餅干是一個好項目,但社區(和我)將從為初學者準備的一系列職位中受益。 在www.hazelcast.com上找到的《 哈茲卡斯特之書》預覽中,我得到了很多很好的信息。
什么是淡褐色?
Hazelcast是一個分布式的內存數據庫。 使用Hazelcast的世界各地都有項目。 該代碼在Apache License 2.0下是開源的。
特征
Hazelcast中已經內置了許多功能。 這里是其中的一些:
- 自動發現網絡上的節點
- 高可用性
- 內存備份
- 緩存數據的能力
- 分布式線程池
- 分布式執行器服務
- 在不同分區中具有數據的能力。
- 異步或同步保留數據的能力。
- 交易次數
- SSL支持
- 存儲數據的結構:
- 清單
- 不同流程之間的通信結構
- 隊列
- 原子操作
- 長壽
- ID生成
- IdGenerator
- 鎖定
- 等量線
使用Hazelcast
只是和Hazelcast一起玩耍和閱讀就教會了我去做這些事情。
讓我解釋這些假設:
數據將存儲為字節數組
我從《榛子之書》中獲得了這些信息,因此這并不是一個假設。 這很重要,因為不僅數據以這種方式存儲, 密鑰也是如此。 如果使用除基元或字符串以外的其他鍵作為鍵,這會使生活變得非常有趣。 hash()和equals()的開發人員必須以鍵的形式考慮它,將其視為字節數組而不是類。
數據將通過網絡
這是一個分布式數據庫,因此部分數據將存儲在其他節點中。 也有備份和緩存。 有一些技術和設置可以減少通過網絡傳輸數據的速度,但如果要獲得高可用性,則必須進行備份。
數據是遠程的
這是一個分布式數據庫,因此數據庫的一部分將存儲在其他節點上。 我提出這個假設并不是要屈服于數據是遠程的事實,而是要激勵設計以確保在大多數數據所在的位置執行操作。 如果開發人員足夠熟練,則可以將其降至最低。
如果數據不在內存中,則不存在
不要忘記這是一個內存數據庫。 如果未將其加載到內存中,則數據庫將不知道數據存儲在其他位置。 該數據庫不會保留數據以備以后使用。 之所以持續存在,是因為數據很重要。 一旦它內存不足,就無法像傳統數據庫( MySQL)那樣將其從磁盤中帶回。
數據存儲
Java開發人員將很高興知道Hazelcast的數據存儲容器(其中一個是java.util.Collections接口的擴展)除外。 例如,一個IList遵循與java.util.List相同的方法協定。 以下是不同數據存儲類型的列表:
- IList –這使許多對象按其放入順序排列
- IQueue –在BlockingQueue之后,可以用作JMS中的Message Queue的替代。 這可以通過QueueStore保留
- IMap –這擴展了ConcurrentMap。 它也可以由MapStore保留。 它還具有許多其他功能,我將在另一篇文章中討論。
- ISet –保留一組唯一的元素,這些元素不能保證順序。
- MultiMap –它不遵循典型的地圖,因為每個鍵可以有多個值。
例
設定
對于Hazelcast包含的所有功能,初始設置步驟非常簡單。
Hazelcast在一些地方查找配置文件:
- 由hazelcast.config屬性定義的路徑
- 如果類路徑包含在hazelcast.config中,則類路徑中的hazelcast.xml
- 工作目錄
- 如果其他所有方法均失敗,則將hazelcast-default.xml加載到hazelcast.jar中。
- 如果根本不想處理配置文件,則可以以編程方式完成配置。
此處的配置示例定義了用于加入的多播。 它還定義了IMap“ a”。
關于配置的警告
Hazelcast不會將配置復制到每個節點。 因此,如果希望能夠共享一種數據結構,則需要在每個節點中完全相同地定義它。
碼
這段代碼調出了兩個節點,并使用IdGenerator將值放在實例的IMap中,以生成鍵并從instance2讀取數據。
package hazelcastsimpleapp;import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IdGenerator; import java.util.Map;/**** @author Daryl*/ public class HazelcastSimpleApp {/*** @param args the command line arguments*/public static void main(String[] args) {HazelcastInstance instance = Hazelcast.newHazelcastInstance();HazelcastInstance instance2 = Hazelcast.newHazelcastInstance();Map map = instance.getMap("a");IdGenerator gen = instance.getIdGenerator("gen");for(int i = 0; i < 10; i++) {map.put(gen.newId(), "stuff " + i);}Map map2 = instance2.getMap("a");for(Map.Entry entry: map2.entrySet()) {System.out.printf("entry: %d; %s\n", entry.getKey(), entry.getValue());}System.exit(0);}}非常簡單,不是嗎! 請注意,檢索地圖實例時,我什至沒有使用IMap接口。 我只是使用java.util.Map接口。 這不利于使用Hazelcast的分布式功能,但在此示例中,它工作正常。
在這里可以觀察到工作中的假設。 第一個假設是將信息存儲為字節數組。 注意數據和密鑰是可序列化的。 這很重要,因為這是存儲數據所必需的。 第二個和第三個假設適用于instance2節點正在訪問的數據。 第四個假設成立是因為讀取時會顯示放入“ a”映射中的每個值。 使用subversion可以在http://darylmathisonblog.googlecode.com/svn/trunk/HazelcastSimpleApp中找到所有這些示例。 該項目是使用Netbeans 8.0進行的。
結論
通過顯示IMap和IdGenerator的簡單示例回顧了Hazelcast眾多功能的快速概述。 討論了在分布式內存數據庫環境中開發時適用的一系列假設。
資源資源
榛子之書。 從http://www.hazelcast.com下載
翻譯自: https://www.javacodegeeks.com/2014/10/beginners-guide-to-hazelcast-part-1.html
總結
以上是生活随笔為你收集整理的Hazelcast入门指南第1部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 菜籽油质量等级一二三哪个好(菜籽油质量等
- 下一篇: JAXB –新手的观点,第2部分