dgraph實現基本操作


dgraph實現基本操作

簡單介紹

dgraph 是一個分布式圖數據庫

mutate 為一個突變, 一般認為添加數據或者是刪除數據為一個突變

query 為一個查詢

golang實現dgraph的基本操作
dgraph實現社交關系中的正反向查詢

創建基礎數據庫

{
set {
_:wangha <name> "wangha" .
_:wangha <age> "17" .
_:wangha <from> "China" .
_:wangha <usernameOFen> "wangha" .
_:wangha <usernameOFcn> "王哈" .
_:wangha <usernameOFjp> "王ハ" .
_:wangha <friend> _:cyc .
_:wangha <friend> _:xhe .

_:cyc <name> "chenchao" .
_:cyc <age> "18" .
_:cyc <from> "China" .
_:cyc <usernameOFen> "ChaoChen" .
_:cyc <usernameOFcn> "陳超" .

_:xhe <name> "xhe" .
_:xhe <age> "18" .
_:xhe <from> "Japan" .
_:xhe <usernameOFcn> "x鶴" .

_:cxy <name> "changyang" .
_:cxy <age> "19" .
_:cxy <from> "England" .
_:cxy <usernameOFcn> "常颺" .
_:cxy <friend> _:ttfq .

_:ttfq <name> "yetao" .
_:ttfq <age> "18" .
_:ttfq <from> "Russian" .
_:ttfq <usernameOFen> "TaoYe" .
_:ttfq <usernameOFcn> "葉掏" .
_:ttfq <friend> _:xhe .
}
}

看到右邊出現Done. 說明添加完成

由於此處, 我使用的是http客戶端, 需要自己設置表的一些屬性, goClient等可代碼實現.

設置在Schema中, 設置如下:

在默認的時候, 各元素都為default, 需要全部自己修改為string類型,並且設置index(索引), 在dgraph中, 只有被設置為索引的元素才可被查詢.

查詢

dgraph提供了豐富的query語句, 可見官網

此處我們假設查詢有關於username="wangha"的各種信息.

{
  aboutme(func:eq(usernameOFen,"wangha")){
    uid
    name
    usernameOFcn
    usernameOFen
    usernameOFjp
  }
}

得到結果如下:

其實還有更加簡單的辦法, 用於查詢信息.

{
  aboutme(func:eq(usernameOFen,"wangha")){
    expand(_all_)
  }
}

添加節點

此時, 又進入了一位新朋友 yaodao , 我需要將他加入數據庫, 而且他存在 < friend > 為 _:wangha , 那么此時, 我需要首先獲得 _:wangha 的uid , 隨后將其加入數據庫

獲取wangha的uid

{
  wanghauid(func:eq(usernameOFen,"wangha")){
    uid
  }
}

得到wangha的uid為 "uid": "0x2"

將新朋友的數據插入

{
set {
_:yaodao <name> "yaozhao" .
_:yaodao <age> "24" .
_:yaodao <from> "M78Star" .
_:yaodao <usernameOFen> "ZhaoYao" .
_:yaodao <usernameOFcn> "姚X" .
_:yaodao <usernameOFjp> "姚飛機" .
_:yaodao <friend> <0x2> .
}
}

當然, 可以使用別的方式, 比方說:

  1. 將yaodao的信息插入
  2. 獲取yaodao的uid
  3. 插入 <yaodao的uid> <friend> <wangha的uid>

此時, 可以查看yaodao的朋友

{
  yaodaofriends(func:eq(name,"yaozhao")){
    friend{
      uid
      name
      usernameOFcn
    }
  }
}

結果如下:

更新數據

比如此時yaodao的數據有錯, age應該為22

查詢yaodao的uid

{
  yaodaofriends(func:eq(name,"yaozhao")){
    uid
  }
}

得到結果: "uid": "0x10"

更新數據

{
set {
<0x10> <age> "22" .
}
}

驗證看看結果:

沒有任何問題.

刪除

比如, 此時, yaodao強烈要求我刪除他的數據.

所以, 沒辦法了...

{
delete {
<0x10> * * .
}
}

此時, 我再回去query

發現除了uid, 其他所有的數據已經沒了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM