YouTrackDB: JetBrains 的物件導向圖形資料庫

YouTrackDB: JetBrains 的物件導向圖形資料庫

YouTrackDB 是由 JetBrains 開發的通用型物件導向圖形資料庫。其設計旨在原生處理圖形關係,提供一種儲存格式,以消除昂貴的執行期 JOIN 操作,轉而為連結遍歷提供 O(1) 的複雜度。

核心技術特性

YouTrackDB 將圖形能力與物件導向原則相結合,以提供高效能的資料處理與靈活的架構管理。

高效能圖形遍歷

In YouTrackDB 中的連結遍歷是以 O(1) 複雜度進行處理的。透過使用圖形關係的原生儲存格式,資料庫避免了與傳統 SQL JOIN 操作相關的效能開銷。

物件導向資料模型

此資料庫實作了豐富的物件導向 API,其中繼承與多型等基本概念在資料庫層級進行處理。這讓開發者能將複雜的物件階層直接映射到儲存層。

事務完整性與安全性

  • Snapshot Isolation: 所有事務都預設在快照隔離(snapshot isolation)下執行。這確保了每個事務從開始時間起都能看到資料庫的穩定快照,從而防止髒讀、不可重複讀與幻讀。
  • Security Profiling: 系統使用基於使用者、角色與謂詞安全策略(predicate security policies)的安全設定檔機制。
  • Data Encryption: YouTrackDB 支援對磁碟上儲存的所有靜態資料進行選用性加密。

查詢語言與 API

YouTrackDB 提供多種與資料互動的方式,以平衡靈活性與效能:

  • Gremlin and TinkerPop: 資料庫實作了 Apache TinkerPop API 並開箱即用地支援 Gremlin 查詢語言。
  • YQL (YouTrackDB Query Language): 為了獲得最大效能,JetBrains 建議使用 YQL。這是一種基於 SQL 的語言,並針對圖形功能進行了擴展,利用點號表示法進行連結遍歷,並使用 MATCH 陳述式進行圖形模式匹配。

部署與整合

YouTrackDB 旨在實現靈活的部署,支援嵌入式與伺服器端配置。

嵌入式整合

開發者可以使用 Maven 或 Gradle 將 YouTrackDB 整合為嵌入式資料庫。youtrackdb-embedded 構件(artifact)是一個 shaded uber-jar,它會重新定位第三方依賴項(例如 Guava, Jackson, 和 Groovy)以避免與主應用程式發生版本衝突。

伺服器端部署

YouTrackDB 可以使用 Docker 作為網路服務進行部署。執行它至少需要 JDK 21。

架構靈活性

為了支援各種開發工作流,資料庫可以運行在三種不同的模式下:

  1. Schema-less: 無預定義架構。
  2. Schema-mixed: 結構化與非結構化資料的組合。
  3. Schema-full: 嚴格遵守定義好的架構。

專案起源與背景

根據社群討論與貢獻者的見解,YouTrackDB 是 OrientDB 的一個分支(fork),並在 com.jetbrains.youtrackdb 套件命名空間下進行了重新架構。該專案由 OrientDB 的主要貢獻者 Andrii Lomakin 領導。

雖然該專案是由 JetBrains 開發並在內部生產環境中使用,但社群成員指出,它尚未成為 YouTrack 生產版本的核心資料庫,YouTrack 仍持續使用 Xodus。此外,該專案是用 Java 而非 Kotlin 編寫的,並且在開發過程中大量使用了 Claude Code,包括使用 25 個代理(agent)定義來執行程式碼審查等任務。

社群觀點

使用者與觀察者針對資料庫的定位提出了幾點看法:

"Isnt youtrackdb a odd name, if its intended as a general use db? Why link it that much to a specific known product?"

其他貢獻者將其與其他圖形解決方案進行比較,提到了 TypeDB 的物件導向圖形模型,以及 FalkorDB 的 Redis 基礎方法。

Sources