AzureのMarketPlaceでArangoDBを触る
ArangoDBとは
ArangoDBは“マルチモデルデータベース”と呼ばれ、1つのエンジンで「ドキュメント」「グラフ」「KV」「全文検索(ArangoSearch)」を扱えるデータベースです。

なぜ、マルチモデルDBが良いかというと、リソースがArangoDBだけで済む、データ同期・ETL・複数DB運用が不要となります。
| データ | 一般に使うDB | ArangoDBの場合 |
|---|---|---|
| 構造化データ(JSON) | MongoDB | 同じDB内 |
| グラフ(KG) | Neo4j / Nebula | 同じDB内 |
| 検索/ベクトル | Elasticsearch / Weaviate | ArangoSearchで同じDB内 |
| KVキャッシュ | Redis | 同じDB内 |
技術アーキテクチャ
ArangoDBは単一のサーバーコアで以下を統合:
- Document Store(Mongo系)
- Graph Engine(Edgeコレクション)
- AQL(SQL + JSON + Graph)
- ArangoSearch(全文検索 + スコアリング + ベクトル検索)
- SmartGraph / Enterprise Graph Sharding
これによりJOIN + Graph Traversal + Full-text search + Vector search を1クエリで実行できる。
AQL(ArangoDB Query Language)でクエリ実行
SQL + Gremlin/Neo4j Cypher + JSON操作のハイブリッド
-- グラフ探索しながら全文検索するクエリ
FOR v, e, p IN 1..3 OUTBOUND "users/123" GRAPH "UserGraph"
SEARCH ANALYZER(v.description IN TOKENS("自動車 ECU ログ", "text_ja"), "text_ja")
SORT BM25(v) DESC
LIMIT 10
RETURN { path: p, score: BM25(v) }
ArangoSearchによるRetrieval5つ
ArangoSearchは以下を統合検索できる。
- Full-Text Search(形態素解析 / BM25)
- Vector Search
- Metadata検索(AQLの普通のWHERE)
- Graph Traversal中の検索
- Rankingの合成(BM25 + VectorScore)
ArangoDB vs Neo4j vs Kùzu比較表
| 項目 | ArangoDB | Neo4j | Kùzu |
|---|---|---|---|
| モデル | マルチモデル | グラフ特化 | OLAP向けGraph |
| 検索 | ArangoSearch | 別途Elasticsearchなど | 検索弱い |
| Vector Search | ◯ | △(Graph + Vectorは弱い) | △ |
| 分散/HA | ◎ | ◯ | ✕ |
| クエリ | AQL(Graph+SQL) | Cypher | Cypher-like |
| VersionRAG適性 | ◎ | ○ | ○〜△ |
| 1DBで完結性 | ◎ | △ | ✕ |
AzureでArangoDBの環境を作る
本題です。
Azure Portalのmarket placeでarangodbを検索

リソースを作成します。

次にネットワーク設定で、受信ポートルールを追加します。

ポイントはポートの8529を許可することです。
あとは、下記からWebUIにアクセスできます。
http://[PublicIP]:8529/

ただ、初期アカウントとパスワードがわからないので、
sshでサーバーにアクセスします。
ssh -i ダウンロードした秘密鍵.pem azureuser@PublicIp
sudo systemctl stop arangodb3
sudo arango-secure-installation
Please enter password for root user:
という感じで、rootユーザーの初期パスワードを設定できます。
これで、先ほどのWebUIからログインすると、ROOTユーザーでログインできます。

ArangoDBのグラフビューで可視化してみる
このような電源のネットワークを作成してみます。
Battery12V → Fuse_F1 → MainRelay → ECU_Engine
→ ECU_Body
コレクション作成
WebUIでコレクションを作成します。
コレクションにはDocumentとEdgeが選べるのですが、
PowerNodesをDocumentで、PowerEdgesをEdgeで作成します。
電源ノードのダミーデータ登録
FOR node IN [
{ _key: "Battery12V", name: "Battery 12V", node_type: "Battery", voltage: 12 },
{ _key: "Fuse_F1", name: "Fuse F1", node_type: "Fuse", ratingA: 30 },
{ _key: "MainRelay", name: "Main Relay", node_type: "Relay" },
{ _key: "IGN_SW", name: "Ignition Switch", node_type: "Switch", mode: "IGN_ON" },
{ _key: "ECU_Engine", name: "Engine ECU", node_type: "ECU", domain: "Powertrain" },
{ _key: "ECU_Body", name: "Body ECU", node_type: "ECU", domain: "Body" }
]
INSERT node INTO PowerNodes
電源ライン(Edge)を登録
FOR e IN [
{
_from: "PowerNodes/Battery12V",
_to: "PowerNodes/Fuse_F1",
relation: "feeds" // バッテリ → ヒューズ
},
{
_from: "PowerNodes/Fuse_F1",
_to: "PowerNodes/MainRelay",
relation: "feeds" // ヒューズ → メインリレー
},
{
_from: "PowerNodes/MainRelay",
_to: "PowerNodes/IGN_SW",
relation: "feeds" // リレー → IGNスイッチ
},
{
_from: "PowerNodes/IGN_SW",
_to: "PowerNodes/ECU_Engine",
relation: "feeds" // IGN ONで Engine ECU へ給電
},
{
_from: "PowerNodes/IGN_SW",
_to: "PowerNodes/ECU_Body",
relation: "feeds" // IGN ONで Body ECU へ給電
}
]
INSERT e INTO PowerEdges
Graphを追加
WebUIで、下記のように選択します。

グラフを開くと、下記のようなグラフが確認できます。

-- AQLでBatteryから下流のノードをたどる
FOR v, e, p IN 1..5 OUTBOUND "PowerNodes/Battery12V" PowerEdges
RETURN {
pathVertices: p.vertices[*].name,
pathEdges: p.edges[*].relation
}

まとめ
AzureでArangoDBのリソースを用意することは容易い。
マルチモデルデータベースの良さはリソース管理のしやすさはありますが、AQLは複雑だと思ったので、
LLMでいかにデータ構造を理解して、クエリを作成できるかの検証が必要そうです。
Discussion