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 and TinkerPop: データベースはApache TinkerPop APIを実装しており、Gremlinクエリ言語を標準でサポートしています。
  • YQL (YouTrackDB Query Language): 最大限のパフォーマンスを得るために、JetBrainsはYQLを推奨しています。これはグラフ機能の拡張を備えたSQLベースの言語であり、リンクのトラバーサルにはドット記法を使用し、グラフパターンのマッチングにはMATCH文を使用します。

デプロイメントと統合

YouTrackDBは、柔軟なデプロイメントのために、組み込み型(embedded)とサーバー型の両方の構成をサポートしています。

組み込み型統合

開発者は、MavenまたはGradleを使用して、YouTrackDBを組み込み型データベースとして統合できます。youtrackdb-embeddedアーティファクトは、shaded uber-jarであり、サードパーティの依存関係(GuavaJacksonGroovyなど)をホストアプリケーションとのバージョン競合を避けるためにリロケーション(再配置)しています。

サーバー・デプロイメント

YouTrackDBは、Dockerを使用してネットワークサービスとしてデプロイできます。実行には少なくともJDK 21が必要です。

スキーマの柔軟性

さまざまな開発ワークフローをサポートするために、データベースは3つの異なるモードで動作できます。

  1. Schema-less: 定義済みのスキーマなし。
  2. Schema-mixed: 構造化データと非構造化データの組み合わせ。
  3. Schema-full: 定義されたスキーマへの厳格な準拠。

プロジェクトの起源と背景

コミュニティの議論やコントリビューターの洞察に基づくと、YouTrackDBはOrientDBのフォークであり、com.jetbrains.youtrackdbパッケージ・ネームスペースの下で再設計されています。プロジェクトは、OrientDBの主要なコントリビューターであるAndrii Lomakin氏によってリードされています。

JetBrainsによって開発され、社内での本番環境で使用されている一方で、コミュニティのメンバーは、YouTrackのプロダクション版において、まだ主要なデータベースとして使用されていない(YouTrackは引き続きXodusを使用している)ことに注目しています。さらに、プロジェクトはKotlinではなくJavaで記述されており、開発において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や、RedisベースのアプローチのFalkorDBについて言及しています。

Sources