世界を動かす技術を、日本語で。

Grafeo – Rustで構築された高速で軽量な埋め込み型グラフデータベース

概要

  • Grafeo は高速かつ省メモリなグラフデータベース
  • Rust製コア による安全性と高パフォーマンス
  • 多言語・多データモデル対応 で柔軟な運用が可能
  • ベクトル検索・AI連携 など最新技術を搭載
  • 幅広い言語バインディング と容易な導入

Grafeoとは何か

  • LDBC Social Network Benchmark で最速クラスのグラフDB
  • インメモリDB よりも低いメモリフットプリント
  • Rust製コア、ベクトル化実行、適応チャンク、SIMD最適化による高速処理
  • ACIDトランザクション とMVCCスナップショット分離による信頼性
  • 埋め込み型・サーバ型 どちらも対応

多言語クエリ対応

  • GQL, Cypher, Gremlin, GraphQL, SPARQL, SQL/PGQ 対応
  • プロジェクトや開発者のスキルに合わせて選択可能
  • 各言語の特徴:
    • GQL :ISO標準、宣言的パターンマッチ
    • Cypher :Neo4j互換、直感的なASCIIアート構文
    • Gremlin :Apache TinkerPop、トラバーサルベース
    • GraphQL :スキーマ駆動、Web開発者向け
    • SPARQL :RDF標準、セマンティックWeb
    • SQL/PGQ :SQL:2023 GRAPH_TABLE対応

データモデルの柔軟性

  • LPG(Labeled Property Graph)RDF(Resource Description Framework) 両対応
    • LPG :ラベル・プロパティ付きノード&エッジ、リッチデータ型
      • ソーシャルネットワークやアプリデータに最適
    • RDF :主語-述語-目的語トリプル、W3C標準
      • セマンティックWeb、オントロジー、リンクドデータに最適

ベクトル検索・AI連携

  • HNSWベースの類似度検索、量子化(スカラー・バイナリ・プロダクト)対応
  • グラフトラバーサルと意味的類似性 の組み合わせが可能
  • LangChain, LlamaIndex, MCP などAIエコシステムと連携
  • WebAssembly対応 によるブラウザグラフ表示やノートブック連携

導入とバインディング

  • Python(PyO3)、Node.js/TypeScript(napi-rs)、Go(CGO)、C(FFI)、C#(.NET 8)、Dart、WebAssembly に対応
  • アプリ組み込み型 :外部依存ゼロ
  • スタンドアロン型 :REST APIとWeb UI
  • エッジデバイスから大規模クラスタ まで幅広い利用

クイックスタート例

  • Pythonサンプル
    • インメモリDB作成、ノード・エッジ追加、クエリ実行
    • uv add grafeoで導入
  • Rustサンプル
    • cargo add grafeoで導入
    • セッション作成、クエリ投入、結果取得

アーキテクチャの特徴

  • プッシュ型実行エンジン、モーセル駆動並列処理
  • カラムナストレージ と型特化圧縮
  • コストベースクエリ最適化、カーディナリティ推定
  • MVCCトランザクション、スナップショット分離
  • ゾーンマップ によるインテリジェントなデータスキップ

インストール方法

  • Pythonuv add grafeo
  • Node.jsnpm install @grafeo-db/js
  • Gogo get github.com/GrafeoDB/grafeo/crates/bindings/go
  • Rustcargo add grafeo
  • C#dotnet add package GrafeoDB
  • Dartpubspec.yamlgrafeo: ^0.5.21
  • WASMnpm install @grafeo-db/wasm

ライセンス

  • Apache-2.0 License 採用

Hackerたちの意見

こういうの結構多いよね。Helix DBと比べてどうなの?それに、GraphQLでデータベースをクエリする理由って何?そもそもその目的で作られたわけじゃないのに。

AI/LLM駆動のサイクルで、同じようなグラフデータベースが25個も出てきてるよ。Rustで書くとHNで目立つからね。LadybugDBではそれをやらない理由があるんだ。もっと段階的なアプローチを探りたいし、クエリ言語も強く型付けされたサイファーだけに集中したい。 https://github.com/LadybugDB/ladybug/discussions/141

LadybugDBはこの25個のプロジェクトのうちの1つじゃないの?

このDB使ったことある人いる?どこから来たのか背景も知りたいな。コミット履歴を見ると、これはAIがコードしたプロジェクトだって明らかだよ。数ヶ月前に始まって、99%のコミットが1人の貢献者からで、その人は週に10万行のコードをコミットすることもあるみたい。(追記:最初の週には20万行のコード)LLMに反対ってわけじゃないけど、1人が週に10万行もコードを提出してるのを見ると、AIの出力に対して深く考えたりレビューしたりしてるとは思えない。経験上、AIに複雑なプロジェクトの大部分をコードさせると、非常に脆弱で、過剰に複雑で、考えが浅いものになりがちだって知ってる。磨かれたランディングページを持つAIのゴミプロジェクトを調査して痛い目にあったこともあるし、主張されているベンチマークが不適切に実行されたり、AIによって幻覚されたりすることもある。実際にこれを使ってる人いるの?それとも、AIを使って数ヶ月間問題に取り組むことで履歴書のポートフォリオプロジェクトを作ろうとしてるだけの個人的な実験なの?

同意するよ。ここ3ヶ月で新しいグラフデータベースがゼロから作られる爆発的な増加があったね。明らかに多くはLLMの助けを借りてる。https://gdotv.comで何をサポートするか決めるために業界の動向を追わなきゃいけなくて、正直最近はちょっと面倒になってきた。

これは、普通のアーキテクチャのバニラグラフデータベースにしてはかなりのコード量だね。気をつけるべきなのは、特にグラフデータベースエンジンは、繊細で洗練されたデザインなしに多くの鋭い部分を隠すことで知られているってこと。ここで必要なレベルの注意が払われているかは明らかじゃない。

早く出して反復するタイプの人にはちょうどいい感じだね。多分リファクタリングが必要なv0を54日で出すのは、開発者が本当にDBのバックグラウンドを持っていればそんなにクレイジーじゃないよ。オープンソースプロジェクトが3年も何も出さずにダラダラ続くのを見たことあるけど、それも必ずしも良いわけじゃないし。

LLMでコードされたデータベースを使うのは地獄みたいだね。メジャーなデータベースですら粗い部分があって使いづらいことがあるのに。

週に6桁の数字は、かなりの赤信号だね。そんなコミットログは、コード生成の雑さや一括フォーマットを意味することが多いし、たとえ一部が動いても、デザインやテストカバレッジ、長期的なメンテナンスの信頼性には全然自信が持てない。だから、そのDBを本番環境に置くなんて考えられないよ。

グラフデータベースの数に圧倒されてる?今週、新しいサイトを公開したよ。そこではグラフデータベースをリストアップしてカテゴライズしてるんだ。 https://gdb-engines.com

LLMを使ってリストを生成したの?

真面目な質問なんだけど、実際に信頼できるグラフデータベースってある?生産環境で合理的な規模で使えるもので、ベンダーとしてもオープンソースとしても手に入るやつ。例えば、MetaのTAOみたいなやつじゃなくて。

真面目な答えとして、オープンソースに限定すると、JanusGraph、DGraph、Apache AGE、HugeGraph、MemGraph、ArcadeDBはその条件を満たしてるよ。

そうだね、Postgresとか。実際にリレーショナルデータに対してグラフアルゴリズムを実行する必要があるときは、そのデータのサブセットをGrafeoみたいなものにエクスポートして(埋め込みモードがここでは大きなプラス)、分析を行うんだ。

それは難しい質問だね。直接的な答えは避けたいんだけど(なぜなら、私は非営利団体でグラフデータベースのベンチマークを共同でリードしてるから)、グラフデータベースに何が必要かを知るのも実は難しい決断なんだ。私のFOSDEM 2025の講演を見てみて、分野を整理しようとしたから。 https://archive.fosdem.org/2025/schedule/event/fosdem-2025-5...

人々が「Facebookの生産グラフ」として認識しているのは、TAOだけじゃないよ。それにまつわるエコシステムがあって、私はその一部を書いたんだ。詳しい歴史はこちらを見てね。 https://www.linkedin.com/pulse/brief-history-graphs-facebook...

その手のものはたくさんあるよ。https://gdotv.comで数十種類の異なるグラフデータベースを統合してきたけど、サポートされているデータベースのリストにあるのは、1、2の例外を除いて全部本番環境で使えるものばかり。ベンダーにサポートされているかオープンソース(時にはその両方、例えばAzure PostgreSQLのApache AGEみたいな)だよ。長い間存在しているけど、企業でよく使われているのにあまり注目されていない技術もあるよ(例えばJanusGraph)。

Grafeoを使って1時間過ごしたんだけど、関連するライブラリのgrafeo_langchainをローカルのOllamaモデルで動かそうとしてた。結果はまちまちだったよ。PythonのKuzuグラフデータベースがすごく気に入ってるけど、開発者がもうサポートしてないのに今でも使ってる。

埋め込み可能なものについてだけど、gfqlのサイファー構文を発表したばかりだよ。これで、データフレーム上で使える初のOSS CPU/GPUサイファークエリエンジンができた。通常、databricksやsplunkのようなスケールアウトDBと一緒に使われて、セキュリティや詐欺、イベント、ソーシャルデータ分析パイプライン、ML+AIの埋め込みや強化パイプラインなどに使われるんだ。元々は、Graphistryのユーザーが埋め込み可能なインタラクティブなGPUグラフ可視化アプリやダッシュボードを作るために、外部のグラフDBを追加せずにインタラクティブな分析フローを実現するために作ったんだ。単一のGPUで1B以上のエッジ/sが処理できて、DBのインストールも不要。データフレームやApache Arrow、Parquetに直接働きかけることができるよ。https://pygraphistry.readthedocs.io/en/latest/gfql/benchmark... GPUとベクトル化の加速にはマルチレイヤーアプローチを採用していて、より並列処理に優しいコアアルゴリズムを含んでる。これにより、ほとんどのカラムエンジンが抱える問題を解決しつつ、便利な機能を使いたい時だけ支払う形にできるんだ。私たちのベクトル化されたコアは、すでにTCKの半分以上に準拠していて、フローが確立された今、異なるレイヤーでより複雑な部分を追加する作業を進めているよ。コアのGFQLエンジンは、世界中の多くのアナリストチーム(NATO、銀行、アメリカ政府など)に使われていて、もう1年か2年の間に本番環境で運用されているんだ。オープンソースのサイファーサポートは、他の人たちが直接使いやすくするための第一歩だよ、LLMも含めてね :)

「graph-benchでLDBCソーシャルネットワークベンチマークをテストしました」というのが、あなたが作ったベンチマークかどうかは不明だね。「私たちはDBとベンチマークツールを作って、そのツールが私たちが一番だと言っている」よりも、もっと信頼性があるように見える。注意が必要な点だよ。自分たちのツールだと明言して、他のプロジェクトが最良の形で比較されるようにフィードバックを歓迎するって言った方がいいかも。そんな感じが役立つかもしれないけど、難しい問題だね。

グラフデータベースを見るたびに、何の問題を解決しているのか全然分からないんだ。特にLLMの世界では。グラフには面白い特性があって、動的でオープンエンドなクエリには魅力があるけど、グラフDBを使って人々がどんな機能や製品、顧客体験を作っているのかが分からない。探ってみても、結局「うん、でも標準的なDBなら90%は10%の労力でできるよね」って思っちゃう。

そもそも、LLM自体が確率的エッジトラバーサルを持つグラフデータベースなんだ。一部のアプリはそれを決定論的にしたいと思っている。こんな質問がよく出るのは意外だね。主にベクトル埋め込み派から来ていて、彼らはベクトルとキーワード検索で評価の70-80%に到達できることを正当に指摘している。残りの20-30%のために、グラフについてのこの盛り上がりは何なんだろう?

Postgresのような標準的なDBは、非常に専門的なネットワーク分析クエリを行わない限り、完全に機能するグラフデータベースになるよ。これがほとんどの「ナレッジグラフ」データベースが使われている目的じゃないんだ。ただクエリやデータモデリングがちょっと面倒なだけで(SQLを使って「グラフ」構造を表現すること)、これも最新のSQL標準の新しいプロパティグラフクエリ(PGQ)によって改善されているよ。

jandrewrogersが言ってるグラフトラバーサルにおけるキャッシュ置換の病理については、実際にハードウェアサイクルを消費して初めて学ぶことができることだね。Neo4jを使ってナレッジグラフのクエリを行っていた時も似たような問題に直面したよ。トラバーサルの深さが4-5ホップを超えると、データサイズに関係なくレイテンシが予測不可能になった。埋め込み可能なアプローチは面白いけどね。小規模から中規模のグラフ(< 10Mエッジ)が単一プロセス内で動作する場合、スケーラビリティの懸念はあまり重要ではなくて、「依存関係を追加するだけ」で済む開発者体験が、別のデータベースサーバーを運用するよりも優れているんだ。