Hello OrientDB
グラフDBを使ったプロダクトを検討していますが、技術検討しておこうということで、OrientDB を使ってみます。
他にも OSS だと Neo4j、Titan といったものが有名なプロダクトですが、OrientDB の特徴として
- スキーマ定義した従来型のデータ、スキーマレスのNoSQL、そしてグラフDBが扱える Multi-Model
- Neo4jのような「Cypher構文」ではなくSQLライクで問合せできる
点が良いかなと考えて。
インストール
http://orientdb.com/ 公式から Community Edition をダウンロードして、任意のフォルダに展開します。
VisualStudioはNugetでドライバの参照を追加します。Java、node.js など、各種言語用のドライバも用意されていますね。
Serverの起動
展開したフォルダの \bin\server.sh(server.bat) を実行すると、 http://localhost:2480/ で「Orient Studio」にアクセスできます。Web上で参照や各種操作と、グラフを見ることが出来ます。初回アクセス時にパスワードを設定します。
APIで操作
サーバーへの接続と切断
バイナリ接続する場合はPortはデフォルトで 2424 です。
public static class DBConnect
{
private static OServer _server = null;
private static string _hostname = "localhost";
private static int _port = 2424;
private static string _root_user = "root";
private static string _root_passwd = "admin";
private static string _db_name = "DemoDB";
public static OServer Connect()
{
Disconnect();
_server = new OServer(_hostname, _port, _root_user, _root_passwd);
return _server;
}
public static void Disconnect()
{
if (_server != null)
{
_server.Close();
_server.Dispose();
_server = null;
}
}
}
サーバー設定の取得、設定
個別設定の取得と更新は OServer.ConfigGet、OServer.ConfigSet を使います。
public static Dictionary<string, string> ServerConfig()
{
Dictionary<string, string> srvConfig = _server.ConfigList();
foreach (KeyValuePair<string, string> entry in srvConfig)
{
Logger.Info(string.Format(" - {0}: {1}", entry.Key, entry.Value));
}
return srvConfig;
}
データベースの作成と破棄
ストレージ種別にはオンメモリも選択できます。
public static void CreateDatabase()
{
if (!_server.DatabaseExist(_db_name, OStorageType.PLocal))
{
_server.CreateDatabase(_db_name, ODatabaseType.Graph, OStorageType.PLocal);
}
}
public static void DropDatabase()
{
if (_server.DatabaseExist(_db_name, OStorageType.PLocal))
{
_server.DropDatabase(_db_name, OStorageType.PLocal);
}
}
グラフの作成
まったく意味のないグラフですが・・・。
public static void CreateData()
{
using (ODatabase database = new ODatabase(ConnectionOptions))
{
database
.Create.Class("ST")
.Extends<OVertex>()
.Run();
database
.Create.Class("connect")
.Extends<OEdge>()
.Run();
OVertex vertex1 = database
.Create.Vertex("ST")
.Set("name", "ST1")
.Run();
OVertex vertex2 = database
.Create.Vertex("ST")
.Set("name", "ST2")
.Run();
OEdge edge = database
.Create.Edge("connect")
.From(vertex1.ORID)
.To(vertex2.ORID)
.Run();
}
}
Studioで確認
Orient Studio のグラフで「select * from V」とするとグラフを確認できます。