内存数据库之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

相关文章
相关标签/搜索