Yandex 發布了其 DBMS «YDB» 的源代碼

最近,Yandex 宣布發布了其資料庫管理系統「YDB」的源代碼,該系統實現了對 SQL 方言和 ACID 事務的支援。

這個資料庫管理系統(DBMS)從零開始構建,最初的開發目標是確保容錯性、故障自動恢復和可擴展性。值得一提的是,Yandex 已推出營運中的 YDB 集群,包含超過 10 個節點,儲存數百 PB 的數據,並每秒處理數百萬筆分散式事務。

YDB的主要創新

YDB 的一個關鍵特性是它使用基於表格的關聯式資料模型。 YQL( YDB 查詢語言)用於查詢和定義資料模式;它是SQL 的一種方言,專為處理大型分散式資料庫而設計。建立儲存模式時,支援類似檔案系統目錄的樹狀表分組。此外,YDB 還提供了一個 API,用於處理 JSON 格式的資料。

值得一提的是, YDB能夠創建容錯配置,即使磁碟、節點、機架甚至單一資料中心發生故障,也能繼續運作。 YDB 支援跨三個可用區的同步部署和複製,並在某個可用區發生故障時保持叢集的健康狀態。

透過掃描查詢實現資料存取的兼容性,旨在對資料庫執行臨時分析查詢,以唯讀模式執行並傳回 grpc 流。

此外,它還因其使用原生 PDisk 元件和 VDisk 層直接將資料儲存在區塊裝置上而脫穎而出。除了 VDisk 之外,DSProxy 也會運行,它會分析磁碟可用性和效能,並在偵測到問題時將其排除。

其他顯著特點包括:

  • 一種靈活的架構,允許您在 YDB 之上構建各種服務,直至虛擬塊設備和持久隊列。 適用於不同類型的工作負載:OLTP 和 OLAP(分析查詢)。
  • 支持多用戶(多租戶)和無服務器配置。
  • 能夠對客戶端進行身份驗證。 用戶可以在公共共享基礎設施上創建自己的虛擬集群和數據庫,根據請求數量和數據大小考慮資源消耗,或者通過租用/保留某些計算資源和存儲空間。
  • 可以調整記錄的使用壽命以自動刪除過時的數據。
  • 與 DBMS 交互和提交請求是使用命令行界面、集成 Web 界面或 YDB SDK 完成的,它為 C++、C# (.NET)、Go、Java、Node.js、PHP 和 Python 提供庫。
  • 以最小的延遲自動從故障中恢復到應用程序,並在存儲數據時自動保持指定的冗餘。
  • 在主鍵上自動創建索引並能夠定義二級索引以提高任意列訪問的效率。
  • 水平可擴展性。 隨著存儲數據的負載和大小的增長,只需連接新節點即可擴展集群。 計算層和存儲層是分開的,允許您分別擴展計算和存儲。 DBMS 本身監控數據和負載的均勻分佈,同時考慮到可用的硬件資源。 可以實施覆蓋世界不同地區的多個數據中心的地理分佈配置。
  • 在處理跨多個節點和表的查詢時支持強一致性模型和 ACID 事務。 為了提高性能,您可以選擇性地禁用一致性檢查。
  • 自動數據複製,當大小或負載增加時自動分區(分區,分片),以及節點之間的自動負載和數據平衡。

最後值得一提的是,YDB 被用於 Yandex 的專案中,其程式碼使用 C/C++ 編寫,並以 Apache 2.0 授權發布。您可以在以下連結找到原始程式碼以及更多詳細資訊。


在 Google 中將其新增為首選來源