缓存转储
Ignite 支持持久化缓存的快照,此版本中引入了另一种复制用户数据的方法 - 缓存转储。
缓存转储实质上是一个包含创建转储时缓存组的所有数据条目的文件。转储与快照一样可以保证一致性,这意味着创建转储时集群中存在的所有条目都会包含在转储文件中,这些缓存的元信息也包含在内。
与缓存快照的主要区别:
- 缓存转储支持纯内存缓存,而快照不支持纯内存模式的缓存;
- 缓存转储占用磁盘空间更少,转储仅包含缓存条目;
- 缓存转储可用于离线数据处理。
IgniteSnapshot 接口提供了创建转储的方法:
ignite.snapshot().createDump("dump-name", Arrays.asList("cacheGrp1", "cacheGrp2")).get();
然后可以使用DumpReader
程序读取转储:
// Consumer should be implemented to receive all data stored in cache dump.
DumpConsumer cnsmr = new DumpConsumerImpl(..);
DumpReaderConfiguration cfg = new DumpReaderConfiguration(new File("path-to-dump"), cnsmr);
new DumpReader(cfg, log).run();
Calcite引擎:新增优化器提示和诊断工具,更稳定
Calcite 引擎现在完全支持指标、事件和性能统计工具。此外,查询计划和其他有用的属性也都添加到了性能统计报告中。
引入了以下优化器提示,以帮助优化器更合理或更快地构建执行计划:
FORCE_INDEX/NO_INDEX
- 强制或禁用索引扫描;ENFORCE_JOIN_ORDER
- 强制按照查询中指定的顺序执行关联,加快关联查询计划的构建。
另外该版本中还有10+个错误和性能问题修复。
Java瘦客户端:服务感知特性
在早期版本中,瘦客户端会在随机服务端节点上调用服务。但是服务可能不是部署在每个节点上,如果调用的服务在访问的节点上不存在,则调用请求将被重定向到正确的节点,这会导致额外的网络开销,现在Ignite做了优化。
通过服务感知,瘦客户端可以知道服务实例的部署位置,并将请求发送到正确的节点。
注意,从第一次服务调用开始,服务拓扑会异步更新,因此,某些调用仍然可能会做重定向处理。
该功能可用的前提是:
- 在客户端中启用了分区感知特性(默认处于启用状态);
- Ignite为2.16.0及更高版本。
CDC:实时模式
从2.12版本开始,Ignite支持CDC功能。它是通过一个后台进程处理存档的WAL段实现的,由于WAL段的存档需要时间,事件的创建与此进程处理事件之间存在较大的延迟,为了优化该问题,Ignite现在提供了新的解决方案,可以在创建事件后几乎立即对其进行处理。具体请参见CdcManager接口的javadoc。
其他改进和变更
- 修复了在JDK14-21环境中运行的一些问题;
- 实现了集群管理API,可通过各种协议(CLI、JMX、REST)统一管理命令的调用。Ignite现在提供了JMX命令的调用入口;
- 最终禁止在事务中对原子缓存进行操作。已删除
IGNITE_ALLOW_ATOMIC_OPS_IN_TX
系统属性; - 社区同意移除MVCC,
CacheAtomicityMode#TRANSACTIONAL_SNAPSHOT
缓存模式已被删除; - 禁止混合模式缓存组,但可以通过
IGNITE_ALLOW_MIXED_CACHE_GROUPS
系统选项暂时允许这个模式; ignite-ml
和ignite-cassandra
模块已迁移到Ignite扩展库;- 100+ 小改进和错误修复。