
2026/03/21 23:50
**Grafeo** Rustで構築された高速・軽量な埋め込み型グラフデータベース。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary:
Grafeo は、Rust で書かれた高性能なグラフデータベースです。完全な ACID 準拠を保証し、競合システムよりもメモリ使用量が少なく、LDBC Social Network Benchmark において最速の結果を提供します。プロパティグラフ(LPG)と RDF ストレージモデルの両方をサポートし、柔軟なデータ表現を可能にしています。Grafeo は独自の Cypher 風構文を含む複数のクエリ言語を備え、AI ワークロード向けにベクトル検索機能も追加しています。Rust の高速性と安全性を基盤としており、Python、Node.js、Go、Rust、C#、Dart、および WebAssembly プロジェクトへのマルチランゲージバインディングを通じて容易に統合できるため、アプリケーション内での埋め込み利用やスタンドアロンサーバとしても適しています。今後のリリースではエコシステムとの連携拡大、ウェブベースの可視化ツールの改善、およびプッシュ型実行エンジンとクエリオプティマイザのさらなる改良により、さらに効率的なスケーラビリティを目指します。
Summary Skeleton
What the text is mainly trying to say (main message)
Grafeo は、高性能で完全 ACID 準拠のグラフデータベースとして、標準ベンチマークで優れたパフォーマンスを発揮しつつ、柔軟なデータモデル、クエリ言語、および埋め込み機能を提供します。
Evidence / reasoning (why this is said)
LDBC Social Network Benchmark で最速の結果を達成し、競合よりも低いメモリ使用量を実現。LPG と RDF の両方のストレージをサポートし、多様なクエリ言語とベクトル検索機能を備えている点が根拠です。
Related cases / background (context, past events, surrounding info)
Rust のパフォーマンス強みを活かし、AI フレームワークやインタラクティブノートブックと統合。マルチランゲージバインディングで多様な開発者エコシステムに対応しています。
What may happen next (future developments / projections written in the text)
今後のリリースでは、エコシステム連携の拡大、ウェブベースの可視化ツールの向上、プッシュ型実行エンジンとオプティマイザの継続的な改善が期待されます。
What impacts this could have (users / companies / industry)
開発者は Grafeo をアプリケーションに直接埋め込むか、スタンドアロンサーバとして実行でき、Python、Node.js、Go、Rust、C#、Dart、および WebAssembly 環境で外部依存なしに効率的なグラフワークロードを可能にします。
本文
なぜ Grafeo なのか?
-
高性能 – LDBC Social Network Benchmark(埋め込みモードとサーバーモードの両方)で最速のグラフデータベース。メモリフットプリントは他のイン‑メモリDBよりも低く、Rust で実装されたベクトル化実行・適応型チャンク分割・SIMD 最適化操作を採用しています。
-
多言語クエリ – GQL, Cypher, Gremlin, GraphQL, SPARQL, SQL/PGQ。プロジェクトや専門知識に合わせて最適な言語を選択できます。
-
LPG & RDF サポート – ラベル付きプロパティグラフ(LPG)とRDF トリプルの二重データモデル。ドメインに合ったモデルを選びましょう。
-
ベクトル検索 – HNSW ベースの類似検索でスカラー、ビン、または積量化をサポート。グラフトラバースと意味的類似度を組み合わせます。
-
埋め込み型・スタンドアロン型 – アプリケーションに直接埋め込む(外部依存なし)か、REST API と Web UI を備えたスタンドアロンサーバーとして実行。エッジデバイスから本番クラスタまで幅広く対応。
-
Rust コア – エンジンは完全に Rust で書かれ、C の依存は不要です(jemalloc/mimalloc オプション付き)。TLS は性能向上のため C ライブラリを使用。設計段階からメモリ安全性と無敵な並行性を保証。
-
ACID トランザクション – MVCC ベースのスナップショットアイソレーションで完全 ACID 準拠。本番ワークロードに信頼できるトランザクションを提供。
-
多言語バインディング – Python (PyO3)、Node.js/TypeScript (napi-rs)、Go (CGO)、C (FFI)、C# (.NET 8 P/Invoke)、Dart (dart:ffi) および WebAssembly (wasm-bindgen)。好きな言語から Grafeo を呼び出せます。
-
エコシステム – AI 統合(LangChain, LlamaIndex, MCP)、インタラクティブノートブックウィジェット、WebAssembly によるブラウザベースグラフ、ウェブ UI とベンチマークツールを備えたスタンドアロンサーバー。
クイックスタート
Python
import grafeo # インメモリデータベースを作成 db = grafeo.GrafeoDB() # ノードとエッジを作成 db.execute(""" INSERT (:Person {name: 'Alix', age: 30}) INSERT (:Person {name: 'Gus', age: 25}) """) db.execute(""" MATCH (a:Person {name: 'Alix'}), (b:Person {name: 'Gus'}) INSERT (a)-[:KNOWS {since: 2024}]->(b) """) # グラフをクエリ result = db.execute(""" MATCH (p:Person)-[:KNOWS]->(friend) RETURN p.name, friend.name """) for row in result: print(f"{row['p.name']} knows {row['friend.name']}")
Rust
use grafeo::GrafeoDB; fn main() -> Result<(), grafeo_common::utils::error::Error> { // インメモリデータベースを作成 let db = GrafeoDB::new_in_memory(); // セッションを開始しクエリ実行 let mut session = db.session(); session.execute(r#" INSERT (:Person {name: 'Alix', age: 30}) INSERT (:Person {name: 'Gus', age: 25}) "#)?; session.execute(r#" MATCH (a:Person {name: 'Alix'}), (b:Person {name: 'Gus'}) INSERT (a)-[:KNOWS {since: 2024}]->(b) "#)?; // グラフをクエリ let result = session.execute(r#" MATCH (p:Person)-[:KNOWS]->(friend) RETURN p.name, friend.name "#)?; for row in result.rows { println!("{:?}", row); } Ok(()) }
特徴
デュアルデータモデルサポート
| モデル | 内容 | 利用ケース |
|---|---|---|
| LPG (ラベル付きプロパティグラフ) | ラベルと属性を持つノード、タイプ・属性付きエッジ。リッチなデータ型。 | ソーシャルネットワーク、ナレッジグラフ、アプリケーションデータ |
| RDF (リソース記述フレームワーク) | サブジェクト‑ペリオード‑オブジェクト(SPO)トリプル。W3C 標準に準拠。 | セマンティックウェブ、リンクドデータ、オントロジー |
クエリ言語
| 言語 | データモデル | スタイル |
|---|---|---|
| GQL (標準) | LPG | ISO 標準、宣言型パターンマッチ |
| Cypher | LPG | Neo4j 互換、ASCII アートパターン |
| Gremlin | LPG | Apache TinkerPop、トラバースベース |
| GraphQL | LPG / RDF | スキーマ駆動、ウェブ開発者に馴染み |
| SPARQL | RDF | W3C 標準クエリ |
| SQL/PGQ | LPG | SQL:2023 でネイティブグラフ |
例
GQL: MATCH (me:Person {name: 'Alix'})-[:KNOWS]->(friend)-[:KNOWS]->(fof) WHERE fof <> me RETURN DISTINCT fof.name Gremlin: g.V().has('name', 'Alix').out('KNOWS').out('KNOWS') .where(neq('me')).values('name').dedup() GraphQL: { Person(name: "Alix") { friends { friends { name } } } } SPARQL: SELECT DISTINCT ?fofName WHERE { ?me foaf:name "Alix" . ?me foaf:knows ?friend . ?friend foaf:knows ?fof . ?fof foaf:name ?fofName . FILTER(?fof != ?me) }
アーキテクチャのハイライト
- プッシュベース実行エンジン:モルセル駆動並列化
- カラムナストレージ:型別圧縮
- コストベース最適化:カードノリティ推定
- MVCC トランザクション:スナップショットアイソレーション
- ゾーンマップ:インテリジェントデータスキップ
インストール
| 言語 | コマンド |
|---|---|
| Python | |
| Node.js | |
| Go | |
| C# | |
| Dart | に を追加 |
| WASM | |
ライセンス
Grafeo は Apache‑2.0 ライセンスの下で配布されます。