暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【译】DGraph从入门到摔门系列(一)

blue桃之夭夭 2021-05-12
5425


近一周在研究图数据库,就硬着头皮翻译翻译一版梳理一下。


Dgraph是一个开源的,事务性的,分布式的原生图数据库。这是使用Dgraph的入门系列的第一个教程。
在本教程中,我们将学习如何在Dgraph上构建以下图形。


在这个过程中,我们将了解:
  • 使用dgraph/standalone docker镜像运行Dgraph

  • 在Dgraph UI Rate 中执行以下操作

  1. 创建一个节点

  2. 在两节点之间创建一条边


运行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个人: Karthicjessica。也能看到这些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)) {
          name
          age
          }
          }


          进入 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桃之夭夭



                文章转载自blue桃之夭夭,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论