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:最轻量模式,只在本地存数据,适用于数据只读或需要定期刷新的场景中
    image.pngimage.png

5.关联并置

  • 具有相同关联键的数据分配给相同的分区
  • 默认主键是关联键,也可以在代码中制定关联键(通过@AffinityKeyMapped注解)

6.内存架构

  • Data page(数据页):真正保存数据的页
  • Index page(索引页):保存数据页所在位置的页
  • B+Tree Meta page(B+树索引页):B+树索引页,保存的是Index page
  • Free Lists Meta page(空闲列表页):保存当前的空闲页情况
    image.png

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:过期策略,可以在创建缓存时设置,也可在获取缓存时设置
    image.png
  • indexedTypes:索引类型,索引键值对应数组,参数必须为偶数个

四、总结

apache ignite是一个功能非常全面的缓存框架,后续会继续更文apache ignite的实战部分。

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYRzgNpQ' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片