YouTrackDB: JetBrains 的面向对象图数据库

YouTrackDB: JetBrains 的面向对象图数据库

YouTrackDB 是由 JetBrains 开发的一种通用面向对象图数据库。它旨在原生处理图关系,提供一种存储格式,从而消除昂贵的运行时 JOIN 操作,转而实现 O(1) 复杂度的链接遍历。

核心技术特性

YouTrackDB 将图能力与面向对象原则相结合,以提供高性能的数据处理和灵活的模式管理。

高性能图遍历

YouTrackDB 中的链接遍历以 O(1) 复杂度进行处理。通过使用图关系的原生存储格式,该数据库避免了与传统 SQL JOIN 操作相关的性能开销。

面向对象数据模型

该数据库实现了一个丰富的面向对象 API,其中继承和多态等基本概念在数据库层级进行处理。这允许开发者将复杂的对象层次结构直接映射到存储层。

事务完整性与安全性

  • Snapshot Isolation (快照隔离): 所有事务默认在快照隔离下运行。这确保了每个事务从其开始时间起都能看到数据库的一个稳定快照,从而防止脏读、不可重复读和幻读。
  • Security Profiling (安全画像): 系统使用基于用户、角色和谓词安全策略的安全画像机制。
  • Data Encryption (数据加密): YouTrackDB 支持对磁盘上存储的所有静态数据进行可选加密。

查询语言与 API

YouTrackDB 提供多种与数据交互的方式,以平衡灵活性与性能:

  • Gremlin 和 TinkerPop: 数据库实现了 Apache TinkerPop API,并开箱即用支持 Gremlin 查询语言。
  • YQL (YouTrackDB Query Language): 为了获得最高性能,JetBrains 推荐使用 YQL。这是一种基于 SQL 的语言,并针对图功能进行了扩展,利用点号表示法进行链接遍历,并使用 MATCH 语句进行图模式匹配。

部署与集成

YouTrackDB 设计用于灵活部署,支持嵌入式和基于服务器的配置。

嵌入式集成

开发者可以使用 Maven 或 Gradle 将 YouTrackDB 集成为嵌入式数据库。youtrackdb-embedded 构件包是一个 shaded uber-jar,它重新定位了第三方依赖项(如 Guava, Jackson, 和 Groovy)以避免与宿主应用程序的版本冲突。

服务器部署

YouTrackDB 可以使用 Docker 部署为网络服务。它至少需要 JDK 21 才能运行。

模式灵活性

为了支持各种开发工作流,该数据库可以运行在三种不同的模式下:

  1. Schema-less (无模式): 没有预定义的模式。
  2. Schema-mixed (混合模式): 结构化与非结构化数据的结合。
  3. Schema-full (全模式): 严格遵守定义的模式。

项目起源与背景

根据社区讨论和贡献者的见解,YouTrackDB 是 OrientDB 的一个分支,在 com.jetbrains.youtrackdb 包命名空间下进行了重新架构。该项目由 OrientDB 的主要贡献者 Andrii Lomakin 领导。

虽然该项目由 JetBrains 开发并在其内部生产环境中使用,但社区成员指出,它目前还不是 YouTrack 生产版本的核心数据库,YouTrack 仍继续使用 Xodus。此外,该项目是用 Java 而非 Kotlin 编写的,并且在开发过程中大量使用了 Claude Code,包括使用 25 个代理定义来执行代码审查等任务。

社区观点

用户和观察者就该数据库的定位提出了几点看法:

"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