項目開發商 SQLite 已經開始測試一個實驗性的 HCtree 後端 它支持行級鎖定並在查詢處理中提供高級別的並行性。
關於他們工作的新後端,有人提到這個 旨在提高在客戶端-服務器系統中使用 SQLite 的效率 他們必須處理對數據庫的大量並發寫入請求。
該 最初使用的 b-tree 結構 在 SQLite 中存儲數據 它們不是為此類負載設計的。,這將 SQLite 限制為僅寫入一個流。 作為一項實驗,開發人員開始開發一種替代解決方案,該解決方案使用 HCtree 結構進行存儲,更適合併行化寫入操作。
HC-tree (hctree) 項目試圖開發一個新的數據庫後端,它改進了常規的 SQLite,如下所示:
改進的並發性: 使用 begin-concurrent 擴展改變了這一點,以便它可以在頁面級別使用樂觀鎖定並發執行。 這在一定程度上提高了並發性,但是頁級鎖定可以檢測邏輯上獨立的事務之間的衝突,COMMIT 操作仍然需要序列化。
複製支持: 股票 SQLite 支持 會話擴展,它允許將已提交事務的內容序列化以傳輸和應用到第二個數據庫。 Hctree 將其集成到數據庫後端,並添加了對將此類事務應用到領導者-跟隨者配置中的跟隨者數據庫的支持。 在這種情況下,與最初應用到領先數據庫的交易相比,從領先數據庫接收到的交易可以更快地應用,並具有更高的並發性,因為沒有 交易驗證。
消除數據庫大小限制: Stock SQLite 使用 32 位頁碼。 使用 4 KiB 的默認頁面大小,這將導致最大數據庫大小為 2^44 字節或 16 TiB。
要同時處理多個操作, HCtree日誌使用事務分離機制 它使用頁面級鎖,類似於MVCC(多版本包含控制),但使用基於鍵範圍和鍵範圍的事務控製而不是頁面集。
讀寫操作是相對於數據庫快照進行的,只有在事務完成後,快照的變化才會對主數據庫可見。
客戶可以使用三種操作來打開交易:
- «開始«:交易不考慮其他客戶的訪問數據。 如果寫操作是在一個事務中執行的,那麼只有在執行期間沒有對數據庫進行其他寫操作的情況下,該事務才能被提交。
«開始並發«:事務收集有關其他客戶端訪問的信息。 如果寫操作是在一個事務中執行的,那麼在創建快照後其他事務已經提交到數據庫的情況下,該事務可以被提交。
«開始獨家«:開啟一個事務後,阻塞其他事務的操作,直到它完成。
HCtree支持主從復制,允許事務轉移到另一個數據庫,並保持從數據庫與主數據庫同步。
HCtree 還取消了數據庫大小限制:HCtree 使用 32 位標識符而不是 48 位數據頁標識符,這將最大數據庫大小從 16 tebibytes 增加到 1 exbibyte(百萬 tebibytes)。
HCtree 後端的 SQLite 性能預計至少與經典的單線程後端一樣好。 支持 HCtree 的 SQLite 客戶端將能夠訪問 HC-tree 數據庫和遺留 SQLite 數據庫。