DQL-2.1.开始使用Dgraph-介绍
翻译自:这里
Dgraph是一个开源的、事务性的、分布式的、原生的图形数据库。这里是关于使用Dgraph的入门系列的第一个教程。
在本教程中,我们将学习如何在Dgraph上构建以下图形,
在这个过程中,我们将了解到:
- 使用dgraph/standalone docker镜像运行Dgraph。
- 使用Dgraph的UI Ratel运行基本操作
- 创建一个节点。
- 在两个节点之间创建一条边。
- 查询节点信息。
运行Dgraph
运行dgraph/standalone docker映像是开始使用dgraph的最快方法。这个独立映像仅用于快速启动。不推荐用于生产环境。
现在,只需运行下面的命令,Dgraph就已经启动并运行了。
docker run --rm -it -p 8000:8000 -p 8080:8080 -p 9080:9080 dgraph/standalone:v21.03.2
节点和边
在本节中,我们将构建一个包含两个节点和一条连接它们的边的简单图。
在图数据库中,概念或实体表示为节点。它可以是一个销售,一个交易,一个地方,或一个人,所有这些实体都表示为图数据库中的节点。
边表示两个节点之间的关系。上图中的两个节点代表人:Karthic和Jessica。您还可以看到这些节点有两个相关属性:name和age。这些节点的属性在Dgraph中称为谓词。
Karthic跟随(指向)Jessica。follows边在他们之间代表他们的关系。连接两个节点的边在Dgraph中也称为谓词,尽管它指向另一个节点,而不是字符串或整数等值。
dgraph/standalone 镜像设置附带了有用的dgraph UI Ratel。只需从浏览器访问http://localhost:8000,您就可以访问它。
我们将使用最新的Ratel稳定版(Latest)。
使用Ratel执行突变
Dgraph中的创建、更新和删除操作称为突变。
Ratel使运行查询和突变变得更容易。我们将在教程系列中探索它的更多特性。
让我们转到“Mutate”选项卡(Query右边),并将以下突变粘贴到文本区域。现在不要执行它!
{
"set": [
{
"name": "Karthic",
"age": 28
},
{
"name": "Jessica",
"age": 31
}
]
}
上面的突变语句创建了两个节点,对应于与“set”关联的每个JSON值。然而,它并没有在这些节点之间创建一条边。
对突变的语句进行一个小修改就能改变它,所以它在它们之间创造了一条边。
{
"set": [
{
"name": "Karthic",
"age": 28,
"follows": {
"name": "Jessica",
"age": 31
}
}
]
}
让我们来执行这个突变。点击Run
您可以在右边的响应中看到已经创建了两个uid(通用标识符)。响应的“uid”字段中的两个值对应于为“Karthic”和“Jessica”创建的两个节点。
使用has函数进行查询
现在,让我们运行一个查询来可视化刚才创建的节点。我们将使用Dgraph的has函数。表达式has(name)返回所有具有谓词名的节点。
{
people(func: has(name)) {
name
age
}
}
这次转到Query选项卡并粘贴上面的查询。然后,单击屏幕右上角的Run。
Ratel呈现结果的图形可视化。
只要点击其中任何一个,注意到节点被分配了uid,与我们在刚才突变响应中看到的相匹配。
您也可以在右侧的JSON选项卡中查看JSON结果。
理解上面的查询
查询的第一部分是用户定义的函数名。在我们的查询中,我们将其命名为people。但是,您可以使用任何其他名称。
func参数必须与Dgraph的内置函数相关联绑定。Dgraph提供了多种内置函数。has是其中之一。查看查询语言指南,了解Dgraph中其他内置函数的更多信息。
查询的内部字段类似于SQL选择语句或GraphQL查询中的列名!
您可以轻松地指定希望返回的谓词。
{
people(func: has(name)) {
name
}
}
类似地,您可以使用has函数查找带有age谓词的所有节点。
{
people(func: has(age)) {
name
}
}
灵活的模式
Dgraph不执行结构或模式。相反,您可以立即开始输入数据并根据需要添加约束。
让我们来看看这个突变。
{
"set": [
{
"name": "Balaji",
"age": 23,
"country": "India"
},
{
"name": "Daniel",
"age": 25,
"city": "San Diego"
}
]
}
我们创建了两个节点,第一个节点有谓词name、age和country,第二个节点有name、age和city。
最初并不需要模式。当新的谓词出现在您的突变中时,Dgraph会创建它们。这种灵活性可能是有益的,但是如果您希望强制您的突变遵循一个给定的模式,还有一些可用的选项,我们将在后面的文章中探讨模式的问题。