

使用dgraph/standalone docker镜像运行Dgraph
在Dgraph UI Rate 中执行以下操作
创建一个节点
在两节点之间创建一条边
运行Dgraph
对于快速入门来说,使用 dgraph/standalone docker镜像是最快的方式。这个镜像是为快速入门而建的,不建议在生产环境中使用。
首先确保你的电脑已经安装并启动了Docker。
现在只需要运行以下命令,Dgraph服务就起来了。
docker run --rm -it -p 8000:8000 -p 8080:8080 -p 9080:9080 dgraph/standalone:latest
节点(node)和边(edge)
在本节中,我们将构建由两个节点和一条边连接形成的图。

在图数据库中,概念(concepts)或实体(entities)都是以nodes的形式来表达。不管它是一次拍卖、一笔交易、一处地点或一个人,所有这些实体在图数据库中都以节点(nodes)的形式存在。
而边(edge)则是2个节点(nodes)间的关联关系。上图中2个节点(nodes)代表了2个人: Karthic和jessica。也能看到这些nodes有2个关联的属性: name 和 age。在Dgraph中,这些属性(properties)叫作 谓词( predicates)。
Karthic关注了Jessica。名为 follows 的边(edge)代表了他们的关系。在Dgraph中,连接了2个节点(nodes)的边(edge)也叫作 谓词(predicate),尽管它指向的是一个节点(node)而不是一个string或integer。
dgraph/standalone 镜像配备了一个有用的Dgraph UI,叫做 Ratel。在浏览器中打开http://localhost:8000,你就能访问它了。

我们使用Ratel最新的稳定版本。

使用Ratel执行Mutations
在Dgraph中,创建、更新和删除操作叫做mutations
Ratel使得queries 和 mutations更为方便,在后续的系列文章中,我们会探索它的更多特性。
在刚才打开的浏览器页面中选中 Mutate 标签,在文本框中粘贴以下内容。注意先不要执行!
{"set": [{"name": "Karthic","age": 28},{"name": "Jessica","age": 31}]}
上述查询创建了2个节点(nodes),每个节点(node)对应set数组中的一个元素。然而,它并没有为2个节点(nodes)创建边(edge)。
做一个简单的修改,以便于在两节点(node)创建一条边
{"set": [{"name": "Karthic","age": 28,"follows": {"name": "Jessica","age": 31}}]}

让我们执行这个mutation。点击Run。

从响应可以看到有2个UIDs(Universal IDentifiers)被创建了。uids字段中的2个值对应了2个新建的节点(nodes),即 Karthic 和 Jessica。
使用 has 函数进行查询
现在,让我们执行一项查询,对刚才创建的nodes进行可视化。我们将使用Dgraph的 has 函数。表达式 has(name) 返回所有带有 name predicate的nodes。
{people(func: has(name)) {nameage}}
进入 Query 标签,键入以上查询。然后点击 Run 按钮。

Ratel将结果以图形化的形式渲染了出来。
点击任意一个node,注意nodes的uid,和上面mutation的响应一致。
也可以在 JSON 标签下,以JSON的形式查看查询结果。

理解上面的查询

查询的第一部分是用户定义的函数名。在上面例子中,我们把它命名为 people。当然,你也可以使用其它名字。
func参数所关联的必须是Dgraph内置的函数。Dgraph提供了各种用途的内置函数。has 便是其中之一。可以在这里(https://docs.dgraph.io/query-language)检索更多的Dgraph内置函数。
内部的查询字段(即下面代码块的第3行)和SQL select语句中的列名或GraphQL查询中的类似。
可以利用它们指定你想要返回哪些谓词(predicates)。
{people(func: has(name)) {name}}
同理,你也可以使用 has 函数查询出所有带有 age 谓词(predicate)的节点(nodes)。
{people(func: has(age)) {name}}
灵活的schema
Dgraph并不强制你定义schema(节点的结构、数据类型等),你可以随时插入数据,并在需要时添加约束。
让我们看一下下面这个mutation。
{"set": [{"name": "Balaji","age": 23,"country": "India"},{"name": "Daniel","age": 25,"city": "San Diego"}]}
我们正在创建两个节点,而第一节点具有谓词name
,age
和country
,第二个有name
,age
和city
。
Schema并不是初始化所必需的。Dgraph会根据mutation自动添加新的谓词(predicates)。这种灵活性常常是有益的,但是如果你想让mutations遵守某个既定的schema,后续的文章中也会介绍其它的可用选项。
结束语
在本教程中,我们学习了Dgraph的基础知识,包括如何运行数据库,添加新节点和谓词以及如何查询。
在结束包装之前,这里有一些有关下一个教程的快速介绍。您知道给定节点的UID也可以获取它们吗?它们还可以用于在现有节点之间创建边!

扫描二维码
获取更多精彩
blue桃之夭夭







