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