グラフデータベースは頂点間の関連性をデータ構造として保持し実用的な時間内にグラフとしてレポートするタイプのデータベース。
使い倒す前にどういうデータベースがあるのか調べた。
グラフデータベース一覧
製品名 | アクセス方法 | 無償 ? | Open ? | 商用可 ? | RDF 構造 ? | 操作言語 |
AllegroGraph | WEB | NO | NO | – | YES | Prolog /SPARQL |
Amazon Neptune | WEB/Gremlin | NO | NO | – | YES | TinkerPop /Gremlin/SPARQL |
AnzoGraph DB | WEB | YES ※ | NO | YES | YES | Cypher /SPARQL |
ArangoDB | WEB | YES | YES | YES | 未記載 | AQL /JavaScript |
DataStax Enterprise Graph | WEB (DataStax Studio) | NO | NO | – | 未記載 | Gremlin /Tinkerpop |
Dgraph | WEB | YES | YES | YES | YES | DQL /GraphQL |
Grakn Core | gRPC | YES | YES | YES | 未記載 | Graql |
InfiniteGraph | 未確認 | NO | NO | – | 未記載 | 未確認 |
JanusGraph | Gremlin | YES | YES | YES | 未記載 | Gremlin |
LEMON | ライブラリ | YES | YES | YES | 未記載 | – |
MarkLogic | 未確認 | NO | NO | – | YES | 未確認 |
Microsoft SQL Server 2017 | 未確認 | 未確認 | NO | – | 未確認 | Transact-SQL ? |
Nebula Graph | WEB Nebula Graph Studio利用 | YES | YES | YES | 未記載 | nGQL |
Neo4j | WEB | YES ※ | NO | – | 未記載 | Cypher |
NetworkX | WEB | YES | YES | YES | 未記載 | Python |
OpenLink Virtuoso | WEB | YES 両版有 | YES 両版有 | YES 両版有 | YES | SPARQL /XQuery /XPath 1.0のみ/XSLT 1.0のみ |
Oracle RDF Graph; part of Oracle Database | 未確認 | 未確認 | 未確認 | 未確認 | YES | 未確認 |
Oracle Property Graph; part of Oracle Database | 未確認 | 未確認 | 未確認 | 未確認 | 未確認 | 未確認 |
OrientDB | WEB/App | YES | YES | YES | 未記載 | Gremlin /TinkerPop |
RedisGraph | 未確認 | YES | YES | YES | 未記載 | Cypher |
SAP HANA | 未確認 | 未確認 | NO | – | 未記載 | Cypher |
Sones GraphDB | 未確認 | 未確認 | 未確認 | 未確認 | 未確認 | 未確認 |
Sparksee | 未確認 | YES ※ | NO | – | 未確認 | 未確認 |
Sqrrl Enterprise | 未確認 | 未確認 | 未確認 | 未確認 | 未確認 | 未確認 |
Teradata Aster | 未確認 | 未確認 | 未確認 | 未確認 | 未確認 | 未確認 |
TerminusDB | WEB | YES | YES | YES | YES | WOQL |
TigerGraph | WEB GraphStudio UI | NO | NO | – | 未記載 | GSQL |
Trinity Graph Engine | 未確認 | 未確認 | 未確認 | 未確認 | 未確認 | 未確認 |
幅が狭すぎてエクセル資料の情報を結構削ってしまったが、何か一つグラフデータベースを使って学んでみるという段階で重要なのは有償か無償か、次にオープンソースか否か、更に商用利用可能かどうかというところだと思う。
次に必要なのは実装方法か。Javaで出来ているか否かはまあまあ重要で、もともとサーバー上でJavaを使っているなら「しめしめJVMに間借り出来るぞ」という気持ちになるだろうし、使っていなければ「無暗にミドルウェア増やさなきゃいけないしメモリが無駄になるではないか」という気持ちにもなるだろう。
- Grakn Core, JanusGraph, Neo4j, OrientDB, Sqrrl Enterprise はJava実装
- Sqrrl Enterpriseは破産により開発終了
- Trinity Graph Engine はMicrosoft Graph Engineが承継?
HAや細かい認証機能、ドキュメント・RDFのストアに対応しているかなどの考慮は後回し。
操作言語
言語 | 概要 | 利用言語例 |
AQL | ArangoDBでドキュメント・グラフに用いるSQL風クエリ言語 | ArangoDB |
Cypher | アドホックやSQL風なプログラミングの処理を実現する宣言型グラフクエリ言語 | |
DQL | Dgraph Query Language. GraphQLのDgraph拡張機能への対応 | Dgraph |
GraphQL | オープンソースのAPI向けデータクエリ&処理言語。ISOなのでSQLのグラフデータベース版の立ち位置。GQLとも。 | Dgraph |
Graql | Grakn’s declarative reasoning (through OLTP) and analytics (through OLAP) query languageの略。 | Grakn Core |
Gremlin | Apache TnkerPopのオープンソースプロジェクトの一部である、グラフプログラミング言語 | |
nGQL | nebula Graph Database 独自のSQL風処理言語 | nebula graph database |
SPARQL | RDF向けのクエリ言語。RDFフォーマットデータの処理に利用する | |
GSQL | SQL風のGraph Query Language。 | TigerGraph |
WOQL | Web Object Query Languageの略。WOQLは強力で洗練されたクエリ言語であり、任意のデータ構造で複雑なパターンを簡潔に表現できる。コアとなる基本的概念が簡素なため表現力豊かで使いやすい | TerminusDB |
もう一つ重要な要素が操作言語である。グラフデータベースはそれぞれデータ構造・実装昨日が異なるためか、データ操作用の言語が乱立している印象がある。
その中でも汎用性が高そうなのはCypher、GraphQL、Gremlin, SPARQL。以下のような棲み分けになるのだろう。
- GraphQLはISO標準のSQL風クエリ
- Cypherは先駆者Neo4j作のため利用が多いSQL風クエリ
- Gremlinはプログラミング時の標準コマンド
- SPARQLはRDF処理の標準クエリ
選定結果
Java なし派だからDgraph, Nebula Graph, TerminusDBが良いと思った。しかしまだ最後まで絞り切れていないのだ。
試しにDgraphを使ってみようと思っている。