Dgraph 入门教程四《开发环境的搭建》

news2024/12/24 8:52:35

在深入 了解Dgraph 之前,我们先了解下开发环境,毕竟让开发人员真正动起手来才是第一步。

Dgraph 支持很多种语言的开发,包括GO,Python,JS,C#和Java等等。出于项目需要,只了解下JS和Java。

1、NodeJS 开发

首先要说一下,js 有两个库,一个gRPC JS Client,一个HTTP JS Client。这里只以http 为例,http也是我们更熟悉的使用方式。

1.1 、demo 下载

链接:https://pan.baidu.com/s/1GCY-dMkHogsVX6mPv3ioqg 
提取码:jzvt 
下载该链接的nodejs-http

1.2、 运行demo

 首先用vscode 打开,安装 ,直接npm install 实现安装。

npm install 

修改Dgraph的地址,这给地址一定要改成自己的服务地址

用node 执行上面的js 代码,在demo里面如下执行

node index-promise.js

看到下面信息,表示执行成功

可以用Ratel UI 去查看,可以看到刚才加入的内容

1.3 、讲解

先看下 package.json, node 安装了一个dgraph-js-http的库,正是因为这个库,我们可以用nodejs开发。这个库是开源的,可以去官方下载。

1.3.1、看下完整的demo代码

const dgraph = require("dgraph-js-http");

// Create a client stub.
function newClientStub() {
    return new dgraph.DgraphClientStub("http://10.10.10.215:8080");
}

// Create a client.
function newClient(clientStub) {
    return new dgraph.DgraphClient(clientStub);
}

// Drop All - discard all data and start from a clean slate.
function dropAll(dgraphClient) {
    return dgraphClient.alter({ dropAll: true });
}

// Set schema.
function setSchema(dgraphClient) {
    const schema = `
        name: string @index(exact) .
        age: int .
        married: bool .
        loc: geo .
        dob: datetime .
    `;
    return dgraphClient.alter({ schema: schema });
}

// Create data using JSON.
function createData(dgraphClient) {
    // Create a new transaction.
    const txn = dgraphClient.newTxn();

    // Create data.
    const p = {
        name: "Alice",
        age: 26,
        married: true,
        loc: {
            type: "Point",
            coordinates: [1.1, 2],
        },
        dob: new Date(1980, 1, 1, 23, 0, 0, 0),
        friend: [
            {
                name: "Bob",
                age: 24,
            },
            {
                name: "Charlie",
                age: 29,
            }
        ],
        school: [
            {
                name: "Crown Public School",
            }
        ]
    };

    let assigned;
    let err;

    // Run mutation.
    return txn.mutate({ setJson: p }).then((res) => {
        assigned = res;

        // Commit transaction.
        return txn.commit();
    }).then(() => {
        // Get uid of the outermost object (person named "Alice").
        // Assigned#getUidsMap() returns a map from blank node names to uids.
        // For a json mutation, blank node names "blank-0", "blank-1", ... are used
        // for all the created nodes.
        console.log(`Created person named "Alice" with uid = ${assigned.data.uids["blank-0"]}\n`);

        console.log("All created nodes (map from blank node names to uids):");
        for (let key in assigned.data.uids) {
            if (Object.hasOwnProperty(assigned.data.uids, key)) {
                console.log(`${key}: ${assigned.data.uids[key]}`);
            }
        }
        console.log();
    }).catch((e) => {
        err = e;
    }).then(() => {
        return txn.discard();
    }).then(() => {
        if (err != null) {
            throw err;
        }
    });
}

// Query for data.
function queryData(dgraphClient) {
    // Run query.
    const query = `query all($a: string) {
        all(func: eq(name, $a)) {
            uid
            name
            age
            married
            loc
            dob
            friend {
                name
                age
            }
            school {
                name
            }
        }
    }`;
    console.log(query);
    const vars = { $a: "Alice" };

    return dgraphClient.newTxn().queryWithVars(query, vars).then((res) => {
        const ppl = res.data;

        // Print results.
        console.log(`Number of people named "Alice": ${ppl.all.length}`);
        for (let i = 0; i < ppl.all.length; i++) {
            console.log(ppl.all[i]);
        }
    });
}

function main() {
    const dgraphClientStub = newClientStub();
    const dgraphClient = newClient(dgraphClientStub);
    return dropAll(dgraphClient).then(() => {
        return setSchema(dgraphClient);
    }).then(() => {
        return createData(dgraphClient);
    }).then(() => {
        return queryData(dgraphClient);
    });
}

main().then(() => {
    console.log("\nDONE!");
}).catch((e) => {
    console.log("ERROR: ", e);
});

还有异步代码 ,请查看demo。

1.3.2 、链接服务端

用如下代码

const dgraph = require("dgraph-js-http");

const clientStub = new dgraph.DgraphClientStub(
    // addr: optional, default: "http://localhost:8080"
    "http://localhost:8080",
    // legacyApi: optional, default: false. Set to true when connecting to Dgraph v1.0.x
    false,
);
const dgraphClient = new dgraph.DgraphClient(clientStub);

1.3.3 、操作Schema

用下面的代码去更新Schema

const schema = "name: string @index(exact) .";
await dgraphClient.alter({ schema: schema });

比如在demo中

// Set schema.
function setSchema(dgraphClient) {
    const schema = `
        name: string @index(exact) .
        age: int .
        married: bool .
        loc: geo .
        dob: datetime .
    `;
    return dgraphClient.alter({ schema: schema });
}

1.3.4、操作数据

用mutate 函数操作数据,可以在demo中找到类似代码

// Create data.
const p = {
    name: "Alice",
};

// Run mutation.
await txn.mutate({ setJson: p });

1.3.5、查询数据

可以用变量去拼查询语句。比如变量 $a。

query all($a: string) {
  all(func: eq(name, $a))
  {
    name
  }
}

其他的方式请查看对应的API

2、Java的开发

2.1、demo的下载

链接:https://pan.baidu.com/s/1GCY-dMkHogsVX6mPv3ioqg 
提取码:jzvt 
下载该链接的DraphJavaSample

注意我们用的是官方的gPRC框架,这个框架不需要安装Idea软件。如果用Spring boot 和Idea软件,只需要参考App.java的内容即可。

2.2、运行demo

首先要装好java 版本,最好是java 9以上的

用vscode 打开,修改ip和端口号

运行

./gradlew run

出现如下代码表示运行成功

2.3、讲解

2.3.1、链接服务端

下面代码演示了链接方法

ManagedChannel channel1 = ManagedChannelBuilder
    .forAddress("localhost", 9080)
    .usePlaintext().build();
DgraphStub stub1 = DgraphGrpc.newStub(channel1);

2.3.2 、操作Schema

增加一个name的Shema

String schema = "name: string @index(exact) .";
Operation operation = Operation.newBuilder()
        .setSchema(schema)
        .setRunInBackground(true)
        .build();
dgraphClient.alter(operation);

2.3.3、操作数据

演示了用一个Person的对象去操作数据

String schema = "name: string @index(exact) .";
Operation operation = Operation.newBuilder()
        .setSchema(schema)
        .setRunInBackground(true)
        .build();
dgraphClient.alter(operation);

2.3.4、查询数据

// Query
String query =
"query all($a: string){\n" +
"  all(func: eq(name, $a)) {\n" +
"    name\n" +
"  }\n" +
"}\n";

Map<String, String> vars = Collections.singletonMap("$a", "Alice");
Response response = dgraphClient.newReadOnlyTransaction().queryWithVars(query, vars);

// Deserialize
People ppl = gson.fromJson(response.getJson().toStringUtf8(), People.class);

// Print results
System.out.printf("people found: %d\n", ppl.all.size());
ppl.all.forEach(person -> System.out.println(person.name));

3、总结

        本章主要介绍了NodeJS和Java对Dgraph的常用操作逻辑。对Dgraph的操作分同步和异步的,本文以同步为例子,做了加单介绍,对于异步只是Api的调用方式不一样,在此不做详细介绍了。其他语言的调用方式其实大通小异,需要使用的可以去官方看教程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1513087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何用SSH连接

以gitlab的SSH来举例&#xff0c;包括配置与克隆的过程&#xff1a; Git 是一个分布式版本控制系统&#xff0c;这意味着您可以在本地工作&#xff0c; 然后将您的更改共享或推送到服务器。在这种情况下&#xff0c;您推送到的服务器是 GitLab。 GitLab 使用 SSH 协议与 Git …

DC-DC直流隔离模块电源正负双输出升压变换器HRA系列5V12V24V转±50v±80v±110v±150v±200v±250v±300v

特点 效率高达 80%以上1*1英寸标准封装电源正负双输出稳压输出工作温度: -40℃~85℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好可直接焊在PCB 上 应用 HRA 0.2~8W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#xff1a;4.5~9V、9~18V、及18~36V、36…

HTML视频笔记

学习arm开发板&#xff0c;涉及到网页HTML PHP什么的&#xff0c;简单看个视频学习下 HTML&#xff5c;超简单HTML入门教程 https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element ​​​​​​vscode需要的libc6等需要的版本高​​​​​​ 为了安装vscode&#xff0c;将…

Github上哪些好用的工具

专注于web漏洞挖掘、内网渗透、免杀和代码审计&#xff0c;感谢各位师傅的关注&#xff01;网安之路漫长&#xff0c;与君共勉&#xff01; Qexo-爱写博客的师傅强烈推荐 漂亮的 Hexo 静态博客编辑器。该项目是基于 Django 的 Hexo 静态博客管理后台&#xff0c;支持文章管理、…

[C语言]——数组练习

目录 练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚 练习2&#xff1a;⼆分查找 练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚 编写代码&#xff0c;演⽰多个字符从两端移动&#xff0c;向中间汇聚 #include <stdio.h> int main() {char a…

基础小白十天学会linux------>linux系统的介绍,应用,以及快速上手

什么是操作系统&#xff1f; 操作系统&#xff08;Operating System&#xff0c;简称OS&#xff09;是管理计算机硬件与软件资源的系统软件&#xff0c;是计算机系统的核心与基石。它负责为用户和其他软件提供交互的界面&#xff0c;同时管理系统资源&#xff0c;如CPU时间、内…

Vue3实战 第十二章 表格组件里el-table-column 的 formatter属性应用

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

Unity Xlua热更新技术学习指南

热更新是商业网络游戏必不可少的一项技术&#xff0c;而基于lua的热更新技术又是Unity商业网游项目中的一个主流选择。 部分同学近期表示自己在面试中被面试官提问热更新相关知识&#xff0c;但由于对热更新能力有所缺失&#xff0c;最后遗憾的与心仪工作失之交臂。 由此可见&a…

C++第三弹---C++入门(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 C入门 1、内联函数 1.1、概念 1.2、特性 2、auto关键字(C11) 2.1、类型别名思考 2.2、auto简介 2.3、auto的使用细则 2.3、auto不能推导的场景 …

3.自定义工程目录配置CMakeLists

问题背景 熟悉stm32keil开发的都知道&#xff0c;我们在编写不同的外设时&#xff0c;通常都会单独编写一个app文件夹或者是user文件夹之类的来存放不同外设功能的源文件和头文件。 在前面一节2.构建第一个工程并烧录到ESP32开发板-CSDN博客中&#xff0c;我们是使用了一个乐鑫…

数据管道架构设计一览

数据管道架构设计一览 今天来聊聊数据管道。 数据管道是现代系统中有效管理和处理数据的基本组成部分。 这些管道通常包括 5 个主要阶段&#xff1a; 收集&#xff08;Collect&#xff09;摄取&#xff08;Ingest&#xff09;存储&#xff08;Store&#xff09;计算&#x…

OpenCV(七)——灰度图像的阙值处理以及图像的边界填充

灰度图像的阙值处理 在OpenCV中利用threshold()对灰度图像进行阙值处理&#xff0c;该函数通过将图像中的每个像素值与一个给定的阈值进行比较来工作。如果像素值超过这个阈值&#xff0c;那么像素值将被设置成指定的最大值&#xff1b;如果没有超过阈值&#xff0c;则根据不同…

【干货】【常用电子元器件介绍】【晶体三极管】(二)--晶体三极管的应用

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。 一、 三极管电路的链接形式 三极管(transistor)是近代电子电路的核心组件。其 主要功能是做电流的开关,就如同控制水管中水流量的阀 (valve)。三极管工作情况模拟示意图如下图所示。   …

企业网站为什么要用OV级别的SSL证书?

部署OV SSL证书的网站&#xff0c;可在SSL证书详情中查看网站所属企业名称&#xff0c;可以让用户有效区分出钓鱼网站&#xff0c;鉴别网站的真实身份。企业网站为啥要选OV&#xff08;组织验证&#xff09;SSL证书呢&#xff1f;主要有这么几个原因&#xff1a; 1.安全等级更高…

uiCA模拟器和bHive benchmark的使用

概念 uiCA 基本块吞吐量预测器 github地址&#xff1a;GitHub - andreas-abel/uiCA: uops.info Code Analyzer uiCA是一个模拟器&#xff0c;可以预测基本块在最新的英特尔微体系结构上的吞吐量。除此之外&#xff0c;它还提供了代码执行的洞察。 uiCA基于来自uops.info的数…

SpringCloud Hystrix 断路器

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第五篇&#xff0c;即介绍 Hystrix 断路器。 二、概述 2.1 分布式系统面临的问题 复杂分布式体系结构中…

深入探究Java中的TransferQueue:机制、特性与应用场景

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! TransferQueue是Java并发包中的一个强大工具&#xff0c;专为需要精确的数据传递场景而设计。它实现了BlockingQueue接口&#xf…

Midjourney绘图欣赏系列(十)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…

快速构建Vue2/Vue3项目

1.创建一个空文件夹 我创建了一个vue的空文件夹 2.使用vscode打开 3.终端输入npm init -y npm init -y 含义是项目初始化 运行后会出现一个文件&#xff1a;package.json 在运行第四步前&#xff0c;我的项目出现的问题&#xff01;&#xff01;&#xff01; 就是我的文件…

Go——运算符,变量和常量,基本类型

一.运算符 Go语言内置的运算符有&#xff1a; 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 1.1 算术运算符 注意&#xff1a;(自增)和--(自减)在go语言中是单独的语句&#xff0c;并不是运算符。 1.2 关系运算符 1.3 逻辑运算符 1.4 位运算符 位运算符对整数在内存…