內存數據庫之Apache Ingite

上一篇文章,咱們作了內存數據庫的技術選型:html

內存數據庫技術選型算法

本文中,咱們繼續深刻研究Apache Ignite,同時分享一些咱們.Net的編碼實踐。數據庫

首先,Apache Ignite是一個內存數據組織是高性能的、集成化的以及分佈式的內存平臺,他能夠實時地在大數據集中執行事務和計算,和傳統的基於磁盤或者閃存的技術相比,性能有數量級的提高。apache

其中:編程

Data Grid:Ignite內存數據網格是一個內存內的鍵值存儲,他能夠在分佈式集羣的內存內緩存數據。
它經過強語義的數據位置和關係數據路由,來下降冗餘數據的噪聲,使其能夠節點數的線性增加,直至幾百個節點。
Ignite數據網格速度足夠快,通過官方不斷的測試,目前,他是分佈式集羣中支持事務性或原子性數據的最快的實現之一。緩存

SQL Grid:內存SQL網格爲Apache Ignite提供了分佈式內存數據庫的功能,它水平可擴展,容錯而且兼容SQL的ANSI-99標準。 SQL網格支持完整的DML命令,包括SELECT, UPDATE, INSERT, MERGE以及DELETE。 同時支持分佈式SQL Join關聯架構

RDBMS集成: Ignite支持與各類持久化存儲的集成,它能夠鏈接數據庫,導入模式,配置索引類型,以及自動生成全部必要的XML OR映射配置和Java領域模型POJO,這些均可以輕易地下載和複製進本身的工程。
Ignite能夠與任何支持JDBC驅動的關係數據庫集成,包括Oracle、PostgreSQL、MS SQL Server和MySQL併發

Apache Ignite 的功能特性有:運維

  • 分佈式鍵值存儲:Ignite數據網格是一個內存內的鍵值存儲,分佈式的分區化的哈希,集羣中每一個節點都持有全部數據的一部分,這意味着集羣內節點越多,就能夠緩存的數據越多。 Ignite經過可插拔的哈選算法來決定數據的位置,每一個客戶端均可以經過插入一個自定義的哈希函數來決定一個鍵屬於那個節點,並不須要任何特殊的映射服務或者命名節點。
  • 內存優化:Ignite在內存中支持2種模式的數據緩存,堆內和堆外。當緩存數據佔用很大的堆,超過了Java主堆空間時,堆外存儲能夠克服JVM垃圾回收(gc)致使的長時間暫停,但數據仍然在內存內。
  • SQL查詢:Ignite支持使用標準的SQL語法(ANSI 99)來查詢緩存,可使用任何的SQL函數,包括聚合和分組。
  • 分佈式關聯:Ignite支持分佈式的SQL關聯和跨緩存的關聯。
  • ACID事務:Ignite提供了一個徹底符合ACID的分佈式事務來保證一致性。 支持樂觀和悲觀的併發模型以及讀提交、可複製讀和序列化的隔離級別。 Ignite的事務使用了二階段提交協議,適當地也進行了不少一階段提交的優化。
  • 同寫和同讀:通寫模式容許更新數據庫中的數據,通讀模式容許從數據庫中讀取數據。
  • 數據庫異步更新:Ignite提供了一個選項,經過後寫緩存來異步地執行數據庫更新
  • 自動持久化:自動化地鏈接底層數據庫而且生成XML的對象關係映射配置和Java領域模型POJO
  • 數據庫支持:Ignite能夠自動地與外部數據庫集成,包括RDBMS、NoSQL和HDFS。

Apache Ignite具備很是先進的集羣能力,部署很是靈活。異步

  • 節點平等:Ignite沒有master節點或者server節點,也沒有worker節點或者client節點,按照Ignite的觀點全部節點都是平等的。可是開發者能夠將節點配置成master,worker或者client以及data節點。
  • 自動發現機制:Ignite節點之間會自動感知,集羣可擴展性強,不須要重啓集羣,簡單地啓動新加入的節點而後他們就會自動地加入集羣。這是經過一
  • 個發現機制實現的,他使節點能夠彼此發現對方,Ignite默認使用TcpDiscoverySpi經過TCP/IP協議來做爲節點發現的實現,也能夠配置成基於多播的或者基於靜態IP的,這些方式適用於不一樣的場景。
  • 部署模式:Ignite能夠獨立運行,也能夠在集羣內運行,也能夠將幾個jar包嵌入應用內部以嵌入式的模式運行,也能夠運行在Docker容器以及Mesos和Yarn等環境中,能夠在物理機中運行,也能夠在虛擬機中運行,這個普遍的適應性是他的一個很大的優點。
  • 配置方式:Ignite的大部分配置選項,都同時支持經過基於Spring的XML配置方式以及經過Java代碼的編程方式進行配置。
  • 客戶端和服務端:Ignite中各個節點是平等的,可是能夠根據須要將節點配置成客戶端或者服務端,服務端節點參與緩存,計算,流式處理等等,而原生的客戶端節點提供了遠程鏈接服務端的能力。Ignite原生客戶端可使用完整的Ignite API,包括近緩存,事務,計算,流,服務等等。
  • 全部的Ignite節點默認都是以服務端模式啓動的,客戶端模式須要顯式地啓用。

上面大體介紹了Apache Ignite的架構和功能特性,如今咱們以代碼示例的方式,分享一下作的技術原型驗證:

1. 啓動Apache Ignite

代碼中經過調用Ignition.Start()啓動一個Ignite節點。

直接執行apache.Ignite.exe也能夠啓動一個Ignite節點,其內部引用了Apache.Ignite.Core.dll,調用了Ignition.Start()方法

  • Ignite能夠Host在Console和Winform中
  • Ignite依賴Oracle JDK 7及更高版本
  • Ignite能夠獨立運行
  • 存在跨進程訪問的狀況

2. 建立指定的緩存區域

3. 數據寫入緩存

4.數據查詢

5. 數據關聯查詢

6.查詢指定的字段

 

7.全文搜索

8. Apache Ignite集羣部署

節點平等

Ignite沒有master節點或者server節點,也沒有worker節點或者client節點,按照Ignite的觀點全部節點都是平等的。可是開發者能夠將節點配置成master,worker或者client以及data節點。

自動發現機制

Ignite節點之間會自動感知,集羣可擴展性強,不須要重啓集羣,簡單地啓動新加入的節點而後他們就會自動地加入集羣。這是經過一個發現機制實現的,他使節點能夠彼此發現對方,Ignite默認使用TcpDiscoverySpi經過TCP/IP協議來做爲節點發現的實現,也能夠配置成基於多播的或者基於靜態IP的,這些方式適用於不一樣的場景。

部署模式

Ignite能夠獨立運行,也能夠在集羣內運行,也能夠將幾個jar包嵌入應用內部以嵌入式的模式運行,也能夠運行在Docker容器以及Mesos和Yarn等環境中,能夠在物理機中運行,也能夠在虛擬機中運行,這個普遍的適應性是他的一個很大的優點。
配置方式
Ignite的大部分配置選項,都同時支持經過基於Spring的XML配置方式以及經過Java代碼的編程方式進行配置,這個也是個重要的優勢。

9. 客戶端和服務端

Ignite中各個節點是平等的,可是能夠根據須要將節點配置成客戶端或者服務端,服務端節點參與緩存,計算,流式處理等等,而原生的客戶端節點提供了遠程鏈接服務端的能力。Ignite原生客戶端可使用完整的Ignite API,包括近緩存,事務,計算,流,服務等等。

 

代碼以Client模式啓動Ignite

Client/Server架構,帶來了很大的問題!!

  • 每一個使用Ignite的主機都要安裝JDK,同時啓動一個Ignite Client節點
  • 開發、運維、管理成本很高

10. Apache Ignite REST API

Apache Ignite 提供了Restful API,支持對緩存的讀、寫、執行任務、獲取各種指標等。
啓用HTTP鏈接:將libs\optional\ignite-rest-http 拷貝到libs\ignite-rest-http便可。
http://localhost:8080/ignite?cmd=version
Get or create cache
http://localhost:8080/ignite?cmd=getorcreate&cacheName=partionedCache
Add
http://localhost:8080/ignite?cmd=add&key=newKey&val=newValue&cacheName=partionedCache
Get
http://localhost:8080/ignite?cmd=get&key=newKey&cacheName=partionedCache
SQL Query
http://localhost:8080/ignite?cmd=qryexe&type=Person&pageSize=10&cacheName=Person&arg1=1000&arg2=2000qry=salary+%3E+%3F+and+salary+%3C%3D+%3F

 

以上就是整個Apache Ignite的技術分享。

 

周國慶

2017/8/26

相關文章
相關標籤/搜索