はじめに
Azure Cosmos DBは、ドキュメント、キーバリュー、カラムファミリー、Graphなど複数のデータモデルをサポートするマルチモデル・データベースです。
特にGraphデータを扱う場合、次の2つの選択肢があります。
- NoSQL API(Cosmos DBの標準API)
- Gremlin API
どちらを選ぶべきかはユースケースやアプリケーション設計に依存します。
本記事では、それぞれの特徴と優位性を整理し、具体例やクエリ比較、さらに可視化の観点も交えて解説します。
NoSQL API
概要
NoSQL APIはCosmos DBの標準的な利用方法です。ドキュメント指向データモデルをベースにしており、SQLライクなクエリ言語でデータにアクセスできます。
優位な点
-
汎用性の高さ
JSONドキュメントとしてあらゆるデータを保存でき、Graph以外の用途にも統一的に利用可能。 -
学習コストの低さ
SQLライクな構文で問い合わせできるため、既存のSQL知識を持つ開発者がスムーズに導入可能。 -
広範なAzureサービスとの連携
Power BIやLogic Appsなどと自然に統合できる。 -
ベクトル検索のサポート
Azure OpenAIなどで生成したエンベディングを保存し、類似検索やレコメンドに活用可能。
具体例:商品カタログ検索
ECサイトの「商品カタログ」を考えます。
商品(ドキュメント)ごとにカテゴリ・タグ・在庫数などをJSONで持たせ、SQLライクなクエリで簡単に検索・集計できます。
さらに、商品の説明文をエンベディング化して保存しておけば、「意味的に近い商品検索(セマンティック検索)」も実現できます。
Graph構造が必須でないケース(検索・レポート用途など)ではNoSQL APIのほうがシンプルです。
Gremlin API
概要
Gremlin APIはApache TinkerPopのGremlinクエリ言語を利用し、ノード(Vertex)とエッジ(Edge)を直接操作できるGraph専用インターフェースです。
優位な点
-
Graphに特化した設計
ネットワークや関係性を直感的に表現でき、ソーシャルネットワークやナレッジグラフの構築に適している。 -
強力なトラバーサル機能
ノードからノードへとエッジを辿りながら探索できるため、「友達の友達を探す」「依存関係を追う」といった複雑な関係探索が容易。
👉 局所的な探索に特に強い。 -
ネットワーク分析に適した基盤
中心性・クラスタ検出・頻出パターン発見など、ネットワーク全体を俯瞰した分析が可能。
👉 グラフ全体の構造把握に向いている。 -
豊富なクエリ表現力
深さ制御、条件分岐、パス追跡などを柔軟に記述できる。
制約:ベクトル検索は未対応
Gremlin APIはベクトル検索をサポートしていません。
そのため「意味的な類似性検索」を行いたい場合は、NoSQL APIとのハイブリッド利用が現実的です。
例:NoSQL APIでベクトル検索 → 結果のユーザーをGremlin APIで関係探索。
具体例:ソーシャルネットワーク
「Aさんの友達の友達で、同じ趣味を持つ人を探す」ケースを考えます。
SQL的な自己結合を繰り返す必要がありますが、Gremlinなら次のようにシンプルです:
g.V().has("user", "name", "A")
.out("friend")
.out("friend")
.has("hobby", "tennis")
👉 「歩いて辿る」操作が自然に書けるため、関係探索に特に向いています。
クエリ比較:NoSQL API vs. Gremlin API
ユースケース
「ユーザーAの友達の友達を探す」
NoSQL APIでの例
-- ユーザーAの友達を取得
SELECT f FROM c
JOIN f IN c.friends
WHERE c.id = "A"
-- さらに友達の友達を探す場合
SELECT ff
FROM c JOIN f IN c.friends
JOIN u IN (SELECT VALUE c2 FROM c2 WHERE ARRAY_CONTAINS(c2.friends, f))
JOIN ff IN u.friends
特徴: JOINが増えるごとにクエリが複雑化。
Gremlin APIでの例
g.V().has("user", "id", "A")
.out("friend")
.out("friend")
特徴: トラバーサルで自然に表現でき、深さの追加も容易。
可視化の優位性
-
NoSQL API
JSONやテーブル形式の結果になるため、そのままではGraph構造を描画できず、変換が必要。
ただしPower BIなどとの統合により、集計・レポート用途で強みを発揮。 -
Gremlin API
ノードとエッジを直接取得可能。Azure Portalの Graph Explorer や D3.js・Gephi などの外部ツールへスムーズに渡せる。
→ 関係探索のストーリーを「そのまま見せる」ことに優れている。
ベクトル検索の観点
近年のAIユースケース(検索・レコメンド・セマンティック検索)では、ベクトル検索の有無が重要な判断材料になります。
-
NoSQL API
- ネイティブにベクトル検索をサポート
- AI検索やレコメンドにそのまま活用可能
-
Gremlin API
- ベクトル検索は未対応
- ハイブリッド構成により「意味的類似性 × 関係探索」を組み合わせるの必要がある
図解で理解する:NoSQL APIとGremlin APIの違い
1) データモデルの違い
NoSQL API(ドキュメントベース)
Gremlin API(Graphベース)
2) クエリの流れの違い
NoSQL API(自己結合)
Gremlin API(トラバーサル)
3) 可視化での探索例
解説:
この図では、ユーザーAから出発し、友達Cを経由してFに到達する「関係のパス」を強調表示しています。
NoSQL APIではこの経路を抽出するには複雑なJOINを組み合わせる必要がありますが、Gremlin APIなら A → C → F
とトラバーサルを記述するだけで自然に表現可能です。
浅いトラバーサルはNoSQL APIでも十分
これまでGremlin APIの強みとして「関係探索のしやすさ」を挙げてきましたが、実際のユースケースでは親子関係の階層を持った1〜2ホップ程度の浅いトラバーサルにとどまる場合も多いです。
例えば「ユーザーAの友達を取得する」「商品Xを購入したユーザー一覧を探す」といったシナリオです。
NoSQL APIでの実現性
-
JOINを1〜2回行うだけで十分対応可能
クエリ構造はやや冗長になりますが、JSONドキュメント内の配列を展開するJOINを使えばシンプルに書けます。 -
ベクトル検索やBI連携と組み合わせやすい
「意味的に近いユーザーを検索 → そのユーザーの直接の友達をJOINで取得」といった処理を一貫してNoSQL APIで実装できます。
Gremlin APIを使うほどでないケース
関係探索の深さが浅く、かつ分析よりも検索やレポート用途が主眼の場合は、NoSQL APIのみで十分です。
特に「AI検索の結果を1ホップ関係で拡張する」といったシナリオでは、NoSQL APIのほうが統合しやすいでしょう。
まとめ
-
NoSQL API
- 汎用的で既存のSQL知識を活かせる。
- 商品カタログやイベントログ管理など、Graph構造を必須としないケースに適する。
- 深いリレーション探索はクエリが複雑になりやすい。
- ベクトル検索をサポートしており、生成AIとの組み合わせに強み。
-
Gremlin API
- Graph構造に特化し、探索・分析・可視化に強い。
- ソーシャルネットワーク、推薦システム、知識グラフなど、関係性が中心となるアプリに適する。
- ベクトル検索は未対応だが、NoSQL APIとのハイブリッドで補完可能。
比較表
観点 | Cosmos DB NoSQL API | Cosmos DB Gremlin API |
---|---|---|
データモデル | JSONドキュメント | ノード(Vertex)とエッジ(Edge) |
クエリ言語 | SQLライク構文 | Gremlin(トラバーサル) |
学習コスト | 低い(SQL経験者向け) | やや高い(新パラダイム) |
表現力 | JOINで可能だが複雑化 | トラバーサルで自然に表現 |
探索性能 | 深い探索は非効率 | ネットワーク探索に最適 |
分析性能 | 集計得意・関係分析は不得手 | ネットワーク分析に強い |
可視化 | 変換が必要、BI連携が強み | ノード・エッジを直接可視化可能 |
Azure統合 | Power BI / Logic Apps などと連携 | Graph Explorer利用可能 |
ベクトル検索 | サポートあり(AI検索・レコメンド・セマンティック検索に有効) | サポートなし(必要ならNoSQL API等との組み合わせ) |
適した用途 | 商品検索、ログ管理、AI検索基盤、汎用アプリ | SNS、推薦システム、知識グラフ |
判断チェックリスト
- 既存SQL知識を活かしたい / 汎用用途 → NoSQL API
- ソーシャルネットワークや推薦システムを作りたい → Gremlin API
- 関係性探索を重視 → Gremlin API
- 集計やレポートを重視 → NoSQL API
- AI検索やベクトル検索を利用したい → NoSQL API
総括
- NoSQL APIは「汎用・シンプル志向」+「AIとの親和性」
- Gremlin APIは「関係性探索・分析志向」
👉 両者は競合ではなく補完関係。
ユースケースに応じて適切に選択、あるいは組み合わせて利用することが最適解です。