Apache Ignite 2.13.0:基于Apache Calcite的全新SQL引擎

该版本发生了破坏性的变更:删除了遗留的服务网格实现。

基于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+)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章