1 分布式内存级SQL数据库
- Ignite带来了一个兼容于ANSI-99、支持水平扩展和容错的分布式SQL数据库,根据需要,分布模式既可以是跨整个集群的分区模式,也可以是全复制模式。
- 和其它的分布式SQL数据库不同,Ignite的持久化存储将内存和磁盘都视为有效的存储层,磁盘层,即原生持久化存储,默认是禁用的,这时Ignite就是一个纯粹的内存数据库(IMjDB)
- 和其他的SQL存储一样,也可以使用JDBC或者ODBC与Ignite进行交互,Ignite还为Java、.NET和C++开发者提供了原生的SQL API,并且性能更好。
- Ignite的一个显著优势是,完全支持分布式SQL关联,Ignite的数据关联支持并置模式和非并置模式。如果是并置模式,关联是在每个节点的本地可用数据集上执行,而不需要在网络间移动大量的数据,在分布式数据库中,这样的方式提供了最好的扩展性和性能。
- 除了标准的SQL,Ignite还提供了强大的处理API。键值API:Ignite的键值API可以使用户以键值存储的方式与Ignite交互,除了JCache规范(JSR107)支持的标准键值操作,Ignite还提供了分布式ACID事务、持续查询、扫描查询这样的扩展支持;并置处理:这个方式允许直接在数据所在的节点直接执行分布式SQL关联或者自定义业务逻辑,避免了昂贵的序列化和网络开销。
2 键-值内存数据网格
Ignite提供了广泛的键-值API,可以作为一个内存数据网格,可以将Ignite视为一个分布式分区化的哈希映射,每个节点持有整个数据集的一部分,和其他的内存数据网格(IMDG)不同,Ignite可以同时将数据保存在内存和磁盘上,因此也就可以存储比可用物理内存多得多的数据。
目前,Ignite数据网格是分布式架构支持ACID事务或者原子化数据更新最快的实现之一。
通过在应用和数据库层之间嵌入一个分布式缓存,Ignite会改进已有第三方数据库的性能和可扩展性,比如RDBMS、NoSQL或者基于Hadoop的存储,这种做法不需要对已有的数据进行替换,通过通读和通写,会保持与底层数据库的同步,Ignite会自动地与底层数据库事务进行合并,向用户透明地提供事务保证。
但是,这种方法也有限制,比如,SQL和扫描查询只能处理保存在缓存中的数据,不包括外部数据库,因为Ignite无法索引外部数据,如果希望磁盘上的数据也应该被索引到并且可以通过SQL访问,建议使用Ignite的原生持久化。
3 ACID事务
Ignite是一个强一致的平台,完全支持分布式ACID事务,内存和磁盘层,都提供一样的一致性保证。
Ignite的事务,可以跨越多个节点,多个缓存(或者说表)以及多个分区。对于应用来说,乐观锁和悲观锁都是可用的,乐观模式还支持无死锁事务,可以在业务代码层面避免分布式死锁。 (ignite是基于二阶段提交协议实现的分布式事务,如果事务只涉及一个分区或者一个节点,Ignite会使用一个更快的一阶段提交协议。 )
- 一致性和Ignite持久化
如果使用了Ignite的原生持久化,那么所有的更新都会写入预写日志(WAL)文件中来保证一致性,即使事务执行期间集群或者某个节点故障,也没有问题。 WAL的目的是,以附加模式将更新传播到磁盘,这是将数据持久化到磁盘的最快方式,如果集群或者某个节点故障,WAL提供了一个故障场景的恢复机制,集群总是可以恢复到最近成功提交的事务状态。
- 一致性和第三方持久化
如果Ignite作为缓存层运行于第三方数据库之上,比如RDBMS,Ignite仍然会保证缓存数据和外部数据的事务一致性。比如,如果RDBMS作为持久化层,Ignite会在将提交消息发给相关的集群节点之前,将事务写入数据库,这样的话,如果在数据库层发生事务故障,Ignite仍然会将回滚消息发给所有的相关节点,从而保持两者之间的数据一致性。
4 并置处理
基于磁盘的系统,比如RDBMS以及NoSQL,通常使用传统的C/S模式,这时数据是要从服务端传输到客户端的,在客户端进行处理,然后可能被丢弃。这个方法无法扩展,因为在分布式系统中通过网络移动大量数据是非常昂贵的操作。
一个扩展性更好的方法是并置处理,它会反过来将计算带到数据实际驻留的服务端节点,它会在数据实际存储的地方执行高级的业务逻辑或者分布式SQL,甚至关联,避免了昂贵的序列化和网络开销。
5 机器学习
6 多语言支持
Ignite是以Java语言为主进行开发的,因此可以在JVM支持的任何操作系统和架构上部署和运行,比如,Ignite可以部署在Linux、Windows、MacOS、Oracle Solaris等操作系统上,支持x86、x64、SPARC、PowerPC指令集架构。
Java的API支持Ignite的所有功能,使用Java或者Scala开发的应用,相关的逻辑可以直接嵌入Ignite,然后借助于SQL以及键-值操作与集群进行交互,执行分布式计算和机器学习算法等等。