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。
架構靈活性
為了支援各種開發工作流,資料庫可以運行在三種不同的模式下:
- Schema-less: 無預定義架構。
- Schema-mixed: 結構化與非結構化資料的組合。
- 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 基礎方法。