本文介紹如何基于.NET編程環境連接和操作圖數據庫GDB。

前提條件

請確保您的圖數據庫GDB實例與您的ECS虛擬機處于同一個VPC網絡環境。

準備工作

  1. 安裝版本在2.0以上的dotnet環境。如果使用windows開發環境,請使用Windows8以上的OS版本。
  2. 執行.Net命令生成console工程gremlinTest。
    dotnet new console -o gremlinTest
  3. 進入該工程目錄。
    cd gremlinTest
  4. 為您的程序工程來安裝Gremlin的SDK依賴Gremlin.NET
    dotnet add package gremlin.net
  5. 編輯Program.cs文件。
    將內容替換如下,需要將配置信息替換成您的圖數據庫實例的相關信息:
    • ${your-gdb-endpoint}改為您的圖數據庫GDB實例的域名
    • ${username}改為您的圖數據庫GDB實例的用戶名
    • ${password}改為您的圖數據庫GDB實例的密碼
    using System;
    using System.Threading.Tasks;
    using System.Collections.Generic;
    using Gremlin.Net;
    using Gremlin.Net.Driver;
    namespace gremlinTest
    {
        class Program
        {
            private static string endpoint = "${your_gdb_endpoint}";
            private static int port = 8182;
            private static string username = "${username}";
            private static string password = "${password}";
            static void Main(string[] args)
            {
                try
                {
                    var gremlinServer = new GremlinServer(endpoint, port, username: username, password: password);
                    var gremlinClient = new GremlinClient(gremlinServer);
                    Program program = new Program();
                    program.RunQueryAsync(gremlinClient).Wait();
                }
                catch (Exception e)
                {
                    Console.WriteLine("{0}", e);
                }
            }
            private async Task RunQueryAsync(GremlinClient gremlinClient)
            {
                    var vertices = await gremlinClient.SubmitWithSingleResultAsync<dynamic>("g.V().limit(1)");
                    Console.WriteLine("{0}", vertices);
            }
        }
    }

連接并執行

  • 運行命令執行程序,輸出結果的范例如下:
    v[3a63cc90-d957-4324-9ffc-16a8e4c1c1f4]
  • 上面的例子是使用g.V().limit(1)遍歷返回GDB中的一個點。要查詢其他內容,可以替換成其他的DSL。
  • 其他DSL的范例如下,圖的點、邊結構鏈接 http://tinkerpop.apache.org/docs/current/reference/#traversal
  1. 刪除指定label的點、邊。
    g.E().hasLabel('gdb_sample_knows').drop()
    g.E().hasLabel('gdb_sample_created').drop()
    g.V().hasLabel('gdb_sample_person').drop()
    g.V().hasLabel('gdb_sample_software').drop()
  2. 添加頂點,為其設置id、property。
    g.addV('gdb_sample_person').property(id, 'gdb_sample_marko').property('age', 28).property('name', 'marko')
    g.addV('gdb_sample_person').property(id, 'gdb_sample_vadas').property('age', 27).property('name', 'vadas')
    g.addV('gdb_sample_person').property(id, 'gdb_sample_josh').property('age', 32).property('name', 'josh')
    g.addV('gdb_sample_person').property(id, 'gdb_sample_peter').property('age', 35).property('name', 'peter')
    g.addV('gdb_sample_software').property(id, 'gdb_sample_lop').property('lang', 'java').property('name', 'lop')
    g.addV('gdb_sample_software').property(id, 'gdb_sample_ripple').property('lang', 'java').property('name', 'ripple')
  3. 修改或新增age屬性。
    g.V('gdb_sample_marko').property('age', 29)
  4. 建立關系,設置屬性 weight。
    g.addE('gdb_sample_knows').from(V('gdb_sample_marko')).to(V('gdb_sample_vadas')).property('weight', 0.5f)
    g.addE('gdb_sample_knows').from(V('gdb_sample_marko')).to(V('gdb_sample_josh')).property('weight', 1.0f)
    g.addE('gdb_sample_created').from(V('gdb_sample_marko')).to(V('gdb_sample_lop')).property('weight', 0.4f)
    g.addE('gdb_sample_created').from(V('gdb_sample_josh')).to(V('gdb_sample_lop')).property('weight', 0.4f)
    g.addE('gdb_sample_created').from(V('gdb_sample_josh')).to(V('gdb_sample_ripple')).property('weight', 1.0f)
    g.addE('gdb_sample_created').from(V('gdb_sample_peter')).to(V('gdb_sample_lop')).property('weight', 0.2f)
  5. 查詢所有點/指定label的點數量。
    g.V().count()
    g.V().hasLabel('gdb_sample_person').count()
  6. 查詢指定條件的頂點 (>29歲的人,按name降序排列所有人)。
    g.V().hasLabel('gdb_sample_person').has('age', gt(29))
    g.V().hasLabel('gdb_sample_person').order().by('name', decr)
  7. 關聯查詢(獲取marko認識的人,marko認識的人created的software)。
    g.V('gdb_sample_marko').outE('gdb_sample_knows').inV().hasLabel('gdb_sample_person')
    g.V('gdb_sample_marko').outE('gdb_sample_knows').inV().hasLabel('gdb_sample_person').outE('gdb_sample_created').inV().hasLabel('gdb_sample_software')
  8. 刪除關系、頂點。
    g.V('gdb_sample_marko').outE('gdb_sample_knows').where(inV().has(id, 'gdb_sample_josh')).drop()
    g.V('gdb_sample_marko').drop()

有關Gremlin.Net使用方式的更多信息,請參閱Apache TinkerPop3文檔中的Gremlin.Net