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> .
}
}
当然, 可以使用别的方式, 比方说:
- 将yaodao的信息插入
- 获取yaodao的uid
- 插入
<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, 其他所有的数据已经没了
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库