Apache Ignite基本概念及最佳实践(一)——概念篇
前言
Apache Ignite系列:
- Apache Ignite基本概念及最佳实践(一)——概念篇
- Apache Ignite基本概念及最佳实践(二)——实战篇
- Apache Ignite基本概念及最佳实践(三)——监测篇
- Apache Ignite基本概念及最佳实践(四)——问答篇
一、基本概念
1.Ignite是什么
Apache Ignite是一个分布式数据库,用于以内存速度进行高性能计算。项目中涉及到缓存功能的使用,因此本文主讲缓存相关功能与配置
2.Ignite和其他缓存对比
功能 | Ignite | Cassandra | Redis |
---|---|---|---|
存储 | 核心数据结构是分布式哈希,即键值存储。存储对象为二进制数据 | 面向列存储 | 是键值数据库,通过哈希存储。存储对象为五种基本数据结构,如String,list,set |
性能 | 执行query请求时速度快 | 写密集型性能更高 | get操作性能非常好 |
ACID事务 | 完全支持 | 不支持,只支持轻量级事务 | 提供有限支持 |
存储数据类型 | 允许用户使用自己的领域对象存储 | 支持不同类型的数据存储 | 不允许自定义数据类型,仅支持预定义的基本数据结构 |
并置处理 | 在服务端执行高级逻辑,如SQL JOIN | 不支持 | 没有并置处理能力,服务端只支持LUA脚本语言 |
SQL查询 | 支持完整SQL语法以查询内存中的数据 | 有CQL,但限制非常多,如不支持JOIN和子查询 | 不支持任何查询语言,只支持客户端缓存API |
数据库集成 | Ignite可以集成外部的数据库(如Oracle) | 不支持 | 不支持 |
二、要点介绍
1.结点
- Server结点:存储数据,参与缓存,执行计算和流处理
- Client结点:不存储数据,可以进行缓存的读写,参与计算任务,流处理和事务
- Thin Client结点:不存储数据,不参与计算和流处理
2.集群
- 集群中包括服务器节点和客户端节点,不包括Thin Client节点
- 每个节点都必须可以连接其他任何一个节点
- 可以使用TCP/IP或ZooKeeper来实现节点发现功能
3.数据模型
- 所有的数据都是以二进制格式存储的
- 无需将整个对象完全反序列化,就可以读出数据中部分字段
4.数据分区
- PARTITIONED:是扩展性最好的分布式缓存模式,所有数据被均等地分布在分区中,所有的分区也被均等地拆分在相关的节点中。更新快,但读取复杂
- REPLICATED:所有数据都被复制到集群内的每个节点,适用于数据集不大而且更新不频繁的场合
- LOCAL:最轻量模式,只在本地存数据,适用于数据只读或需要定期刷新的场景中
5.关联并置
- 具有相同关联键的数据分配给相同的分区
- 默认主键是关联键,也可以在代码中制定关联键(通过@AffinityKeyMapped注解)
6.内存架构
- Data page(数据页):真正保存数据的页
- Index page(索引页):保存数据页所在位置的页
- B+Tree Meta page(B+树索引页):B+树索引页,保存的是Index page
- Free Lists Meta page(空闲列表页):保存当前的空闲页情况
7.持久化
基于以下功能实现:
- 在磁盘上存储数据分区:磁盘中数据格式与内存中相同
- WAL日志:在数据写入磁盘之前,先将数据写入日志文件,再将数据写入磁盘
- 检查点:检查点建立后,所有改动都会持久化到磁盘
- 变更数据捕获:检测并捕获数据库变动,记录顺序,供其他服务消费
- 交换内存:是操作系统的机制,并不是真正的持久化,节点关闭数据就会丢失
8.SQL
默认使用H2 SQL引擎,SQL语法是ANSI-99兼容的
三、配置
1.Ignite配置
- clientMode:客户端模式
- true:客户端节点
- false(默认):服务端节点
- networkTimeout:链接超时时间,默认是5000
- includeEventTypes:需要监听的事件类型
2.Cache配置
- name:缓存名,不可为空
- atomicityMode:原子性模式
- ATOMIC(默认):所有的操作都以原子方式执行,不支持事务
- TRANSACTIONAL:支持键值API事务,不支持SQL事务
- TRANSACTIONAL_SNAPSHOT:实现MVCC,支持键值事务和SQL事务
- backups:配置备份节点的数量,只有PARTITIONED可配置,默认是0
- writeSynchronizationMode:写入同步模式
- FULL_SYNC:完全同步,客户机节点将等待所有参与的远程节点写入或提交完成
- FULL_ASYNC:完全异步,客户端节点不会等待响应,写入方法完成后或者事务提交后也可能会跟更新
- PRIMARY_SYNC(默认):部分同步,客户端会等待主节点的提交或更新,但不会等待备份节点
- readFromBackup:是否从备份节点读取数据,默认是false
- expiryPolicy:过期策略,可以在创建缓存时设置,也可在获取缓存时设置
- indexedTypes:索引类型,索引键值对应数组,参数必须为偶数个
四、总结
apache ignite是一个功能非常全面的缓存框架,后续会继续更文apache ignite的实战部分。
转载自:https://juejin.cn/post/7247848854438592549