LoginSignup
1
4

More than 5 years have passed since last update.

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 など、各種言語用のドライバも用意されていますね。

image.png

Serverの起動

展開したフォルダの \bin\server.sh(server.bat) を実行すると、 http://localhost:2480/ で「Orient Studio」にアクセスできます。Web上で参照や各種操作と、グラフを見ることが出来ます。初回アクセス時にパスワードを設定します。

image.png

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」とするとグラフを確認できます。

image.png

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4