發布 DBMS SQLite 3.42 和 DuckDB 0.8.0。 CG/SQL 與 SQLite 存儲過程的實現

SQLite 3.42 版本已經發布,這是一個設計為插件庫的輕量級 DBMS。 SQLite 代碼分佈在公共領域,即可以不受限制地免費用於任何目的。 SQLite 開發人員的財務支持由專門創建的聯盟提供,該聯盟包括 Adob​​e、Oracle、Mozilla、Bentley 和 Bloomberg 等公司。

主要變化:

  • 針對FTS5全文索引,實現了secure-delete命令,刪除後徹底清理所有殘留數據。
  • 處理 JSON 格式數據的函數現在支持 JSON5 擴展。
  • 改進的查詢規劃器。 默認情況下啟用觀看次數優化。 消除了子查詢中未使用列的處理。 改進的下推優化實現。
  • 向 CLI 添加了“--unsafe-testing”選項,以允許在測試中使用一些危險的命令,例如“.testctrl”。 在安全模式(“--safe”)下,允許使用“.log on”和“.log off”命令。 添加了對“—”分隔符的支持,用於禁用選項處理後的參數。 添加了與無窮大和 NaN 值關聯的“:inf”和“:nan”參數。
  • 允許應用程序定義的 SQL 函數的名稱與 CROSS、FULL、INNER、LEFT、NATURAL、OUTER 和 RIGHT 關鍵字相交。
  • 擴展了 PRAGMA integrity_check 功能。 添加了在具有 NOT NULL 條件的列中指定 NaN 值的檢查。 改進了錯誤消息的信息內容。
  • 會話添加允許攔截來自沒有 ROWID 的表的更改。
  • “subsec”修飾符已添加到處理時間和日期的函數中以使用小數秒。
  • 將數組和 JSON 對象的默認遞歸深度從 2000 減少到 1000。

此外,DuckDB 0.8.0 DBMS 版本已經形成,它開發了 SQLite 變體,增強了功能和優化,以執行覆蓋大部分存儲數據的分析查詢,例如,聚合表的全部內容或合併多個表大桌子。 提供了 SQL 語言的擴展方言,包括處理非常複雜和長時間運行的查詢的附加功能,以及對複雜類型(數組、結構、聯合)的支持、同時執行多個查詢以及直接從CSV、JSON 和 Parquet 格式的文件。 可以從 PostgreSQL DBMS 導入。

除了來自 SQLite 的 shell 代碼之外,該項目還使用了來自 PostgreSQL 的解析器,移動到一個單獨的庫,來自 MonetDB 的 Date Math 組件,它自己的窗口函數實現(基於 Segment Tree Aggregation 算法),正則表達式處理器基於RE2庫,自帶查詢優化器,MVCC控制機制同時執行任務(Multi-Version Concurrency Control),以及基於Hyper-Pipelining Query Execution算法的向量化查詢執行引擎,可以處理大集合在一次操作中一次獲得值 。 項目代碼在 MIT 許可證下分發。

在新版本的 DuckDB 中:

  • 添加了新表達式“PIVOT”和“UNPIVOT”以將行轉換為列,反之亦然。
  • 改進了導入和導出數據時的並行化。 默認情況下,在使用Parquet、CSV和JSON格式時,實現了CSV格式文件的多流讀取和多線程寫入。
  • 添加“**”運算符以在定義文件路徑時遞歸迭代目錄(例如 FROM“'data/glob/crawl/stackoverflow/**/*.csv';”)。
  • 增加了對時間序列形式的數據(指定時間間隔的參數值的切片)的合併操作(JOIN)的支持,其中合併記錄的標準不是精確匹配,而是值的近似匹配在帶有時間的字段中(例如,您可以組合記錄,時間相差不超過 1 分鐘)。
  • 實現了數據庫元數據的延遲加載,使DBMS的啟動速度提高了數十倍。
  • 添加了對在 Python 中連接自定義函數的支持。
  • 添加了對 ADBC(Arrow 數據庫連接)API 的支持,以便使用 Apache Arrow 進行數據傳輸。
  • 實現綁定以與 Swift 代碼集成。
  • 更改了除法(“/”)運算符的行為,現在默認執行浮點計算而不是整數運算。 為整數除法提出了一個新的運算符“//”。 可以通過設置“SET integer_division=true;”來返回舊行為。
  • 排序時計算空記錄的方法已從“NULLS FIRST”更改為“NULLS LAST”,即NULL 值現在將顯示在末尾而不是列表的開頭。 可以使用設置“SET default_null_order='nulls_first';”恢復舊行為。

此外,可以注意到由 Facebook 開發的 CG/SQL 項目,它提供了一個代碼生成器,用於將存儲過程與 SQLite 一起使用。 CG/SQL 允許您使用 T-SQL (Transact-SQL) 的特殊方言編寫存儲過程,它允許您調用標準 C 庫的函數並訪問 SQLite 中的數據。 生成的存儲過程被編譯成 C 代碼,使用 SQLite C API 執行指定的操作和處理複雜的查詢。 編譯存儲過程可以鏈接到 C、Java 和 Objective-C 程序。 項目代碼用 C 語言編寫,並在 MIT 許可證下分發。

來源: opennet.ru

添加評論