该版本发生了破坏性的变更:删除了遗留的服务网格实现。
基于Apache Calcite的全新SQL引擎
社区实现了一个基于Apache Calcite的试验性的SQL引擎,优势在于:
当前基于H2的SQL引擎,局限性非常明显,比如:
- 部分查询会被拆分为2个阶段(映射子查询和汇总子查询),但是有些SQL无法在2阶段下高效地执行;
- H2是一个非Apache许可的第三方数据库产品;
- 优化器及其他的一些内部设计并未针对分布式环境做优化;
- 特定于Ignite的代码很难合入H2的代码,补丁经常被拒绝。
而Apache Calcite是一个高度可定制化的模块化的SQL引擎,请求可被拆分为2个以上的阶段。
可以在执行查询之前设置查询引擎,下面是SQL的一个示例:
SELECT /*+ QUERY_ENGINE('h2') */ fld FROM table;
或
SELECT /*+ QUERY_ENGINE('calcite') */ fld FROM table;
新的引擎需要将ignite-indexing
模块(依赖于H2)置于类路径中。
读修复策略
读修复是指在正常读取操作期间修复主备之间数据不一致的技术。当用户读取特定键时,Ignite会检查所有副本中给定键的值。
目前实现了如下的读修复策略:
- LWW(最后一次写入):最后一次写入(最新条目)获胜;
- PRIMARY:主节点的值获胜;
- RELATIVE_MAJORITY:相对多数,出现频率比其他的更频繁的值获胜;
- REMOVE:不一致的条目会被删除;
- CHECK_ONLY:仅仅执行检查。
二进制对象中的数组类型
在之前的版本中,Ignite无法保存数组类型信息,现在则可以存入二进制对象。
cache.put(1, new Person[] {new Person(1), new Person(2)});
Person[] obj = cache.get(1);
assertEquals(Person[].class, obj.getClass());
由于兼容性原因该特性默认是禁用的,使用时需要将IGNITE_USE_BINARY_ARRAYS
系统属性配置为true
。
纯内存缓存下的CDC
变更数据捕获(CDC)现在可用于纯内存缓存,这个模式下,这些缓存中只有与CDC有关的参数才会被写入WAL。
其他的改进和变更
- C++瘦客户端实现了持续查询和异步网络事件处理;
- 数据区支持NUMA感知的内存分配;
- 删除了遗留的服务网格实现;
- 其他的小改进和Bug修复(100+)。