• 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, 其他所有的数据已经没了

  • 相关阅读:
    个人学习随笔(psi-blast随笔)
    psp进度(11月25号-31号)
    本周psp(11月17-23)
    规格说明书练习-吉林市1日游
    补PSP进度(10.28-11.3)
    第九周PSP&进度条
    (第九周)读构建之法有感1
    (第九周)读构建之法有感2
    词频统计的效能测试。
    (第二周)读《构建之法》有感
  • 原文地址:https://www.cnblogs.com/wangha/p/10467915.html
Copyright © 2020-2023  润新知