还在用Redis,是时候考虑下Ignite了

点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

上一篇:这300G的Java资料是我师傅当年给我的,免费分享给大家(已修复)

下一篇:2020年互联网大厂最新面试真题以及2000道常见Java面试题(附答案)

作者:攻城狮Bilbo

原文:http://suo.im/5srKE9

最近在一个新的项目技术选型的时候看到了Ignite。Ignite作为一个高性能,分布式内存计算和事务平台,解决了大规模,大数据量,高并发的企业级应用的痛点,是一个非常有潜力的技术。

Ignite的特点

多级存储

Ignite对多级存储的支持主要有三种模式:内存,内存+数据库,内存+原生持久化。

内存:仅使用内存存储数据,为了保证数据不丢失,应该保证数据至少有一份备份。

内存+数据库:在数据库上层用Ignite作为缓存,这里的数据库可以是传统的数据库,例如Mysql,Oracle等。在这里Ignite的作用类似于我们常用的ehcache,guava cache等,但是Ignite是分布式的且更加强大。

内存+原生持久化:Ignite本身支持持久化,可以将数据全部持久化到磁盘,同时将全部或者部分热点数据加载到内存中。

持久化

Ignite本身的持久化支持分布式,事务和SQL语句,具体持久化过程如下图所示:

持久化的核心在于write-ahead log (WAL),其目的在尽快将数据更新到磁盘,并且保证在整个集群出现问题时能够恢复数据。

分布式SQL

Ignite支持关系型数据库中的SELECT, UPDATE, INSERT, DELETE操作,甚至还支持JOIN操作。上面我们说到Ignite有三种不同模式,每种模式对SQL的支持不一样。

内存模式:在这种模式下支持上述的各种SQL操作,且性能非常好。

内存+原生持久化模式:这种模式下支持上述的各种SQL操作,且并不需要把全部数据加载到内存中,Ignite的SQL引擎支持内存和硬盘的联合查询。

内存+数据库模式:这种模式不支持Ignite和数据库的联合查询,也就是说,对于一条语句查询或者更新,Ignite的SQL引擎不会分别从Ignite内存和数据库中取出满足条件的数据并且聚合后返回,这是目前做不到的。除非将外部数据库的数据全部加载到Ignite中。

分布式Key-Value

Ignite可以作为一个传统的K-V存储使用,类似于我们之前常用的Redis,这里就不再赘述。

分布式事务

Ignite˙支持分布式事务,无论是做缓存还是数据持久化到硬盘都可以保证数据的一致性。

Ignite支持多种分布式事务方式,主要有两段式提交和三段式提交以及Ignite本身的WAL。两段式和三段式时分布式事务常用的两种方式,不再赘述,这里简单说下Ignite本身的WAL方式,WAL是write-ahead log的简称,数据在持久化到磁盘的时候会先写到日志文件里面,然后再更新到磁盘。这种方式只支持Ignite原生的持久化方式,如果是内存+外部数据库的方式,只能选择两段式或者三段式事务。

集中处理

在传统的关系型数据库或者非关系中数据库中,我们通常将数据从数据库取到客户端应用进行处理,而Ignite采用了一种不同的方式,将复杂的计算或者是SQL直接放在Ignite集群的节点上处理,将执行的结果返回给客户端应用。这样就避免了大量的数据在网络上传输。

机器学习

Ignite为构建机器学习模型提供了一套简单,弹性和有效的工具集,且不需要做数据转换。机器学习不熟悉,这里就不班门弄斧了。

根据上面Ignite的特点,Ignite适合的使用场景主要有几种:

作为缓存或者数据库使用

Ignite可以作为应用的缓存层甚至是直接作为数据库使用,因为Ignite不仅支持数据的内存存储,还支持持久化和事务,甚至支持SQL查询。如下图所示架构:

应用或者是服务先将数据存储到Ignite集群中,然后在根据需要持久化到磁盘,写到其他数据库,甚至是抽取到大数据平台,在这个架构中Ignite对上可以满足应用和服务的高速访问,对下可以支持多种数据持久化存储的需要。

数据和计算中心

Ignite可以作为一个高性能的数据计算中心,支持复杂的计算和分析,同时也可以作为一个数据集成总线,聚合不同来源的数据,然后做分析处理。因为Ignite是基于内存处理的,所以处理速度会很快,

总结

简单总结一下,Ignite以内存为中心的架构设计在性能方面有很强的表现,可以作为缓存为应用和服务加速,同时支持原生持久化的分布式内存数据库、事务和Key-Value存储、分布式计算框架、易于与各种技术集成、支持机器学习等,还提供了完整的多语言API支持。Ignite融合了分布式,关系型数据库,高速缓存的特点,对于目前的高并发,大数据量的互联网级应用提供了强有力的支撑,在技术选型时可以综合考虑,采用Ignite集群来提升系统性能。

精彩推荐
1、如何在Java代码中去掉烦人的“!=null”2、有人说 Maven 很简单,我却被 "伤害" 过3、Redis 使用的 10 个小技巧4、面试懵了:StringBuilder为什么线程不安全5、除了Vector,Java里还有这个List是线程安全的6、搞清楚Spring事件机制后:Spring的源码看起来简单多了7、惊呆了,Spring Boot居然这么耗内存!8、api监控系统--apimonitor

点个在看少个 bug
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值