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

在深入 了解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)) {uidnameagemarriedlocdobfriend {nameage}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.xfalse,
);
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.hqwc.cn/news/529255.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超标量与多发射和超长指令字设计

前言 大家好我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第11篇,在这里分享给大家,这篇文章讲超标量与多发射和超长指令字设计&#xff0c;前面文章提到的书籍的pdf大家没有的话可以私信找我要&#xff01; 《计算机组成与设计&#xff1a;硬件 / 软件接口》中4.10…

01 数据结构引入 和 顺序表

阅读引言&#xff1a; 从本文开始给大家带来我在复习过程中写的数据结构的代码&#xff0c; 分享给需要的同学 一、数据结构引入 1.数据结构解决什么问题 数据结构可以将杂乱无章的数据管理起来&#xff0c; 提高数据的访问效率 计算机处理的对象&#xff08;数据&#xff09…

【掌握版本控制:Git 入门与实践指南】配置详解|理解本地仓库结构

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;泥中に咲く—ウォルピスカーター 0:34━━━━━━️&#x1f49f;──────── 4:46 &#x1f504; ◀️ ⏸ ▶…

RocketMQ入门指南:从零开始学习分布式消息队列技术

RocketMQ 1. MQ介绍1.1 为什么要用MQ1.2 MQ的优点和缺点1.3 各种MQ产品的比较 2. RocketMQ快速入门2.1 准备工作2.1.1 下载RocketMQ2.2.2 环境要求 2.2 安装RocketMQ2.2.1 安装步骤2.2.2 目录介绍 2.3 启动RocketMQ2.4 测试RocketMQ2.4.1 发送消息2.4.2 接收消息 2.5 关闭Rocke…

【三十】springboot项目上高并发解决示例

互相交流入口地址 整体目录&#xff1a; 【一】springboot整合swagger 【二】springboot整合自定义swagger 【三】springboot整合token 【四】springboot整合mybatis-plus 【五】springboot整合mybatis-plus 【六】springboot整合redis 【七】springboot整合AOP实现日志操作 【…

信钰证券:股市牛市有什么特征?存在以下八大特征

股市牛市存在以下特征&#xff1a; 1、大盘在底部呈现接连的阳K线&#xff0c;一起大盘指数突破上方重要的关口&#xff0c;这说明大盘突破上方压力方位&#xff0c;把转换成支撑方位&#xff0c;行将开启上涨趋势&#xff0c;创建新高。 2、市场上的资金大量流入&#xff0c…

基于php的用户登录实现(v1版)(持续迭代)

目录 版本说明 数据库连接 登录页面&#xff1a;login.html 登录处理实现&#xff1a;login.php 用户欢迎页面&#xff1a;welcome.php 用户注册页面&#xff1a;register.html 注册执行&#xff1a;DoRegister.php 版本说明 v1实现功能&#xff1a; 数据库连接&#x…

图片如何压缩到200k以下?3个图片压缩技巧分享

图片如何压缩到200k以下&#xff1f;在日常生活中&#xff0c;将图片压缩至200K以下至关重要。这不仅能有效节省存储空间&#xff0c;让手机或电脑运行的更流畅&#xff0c;还能显著加快网络传输速度&#xff0c;提升分享和上传体验。同时&#xff0c;许多平台对上传图片的大小…

分类预测 | Matlab基于TTAO-CNN-LSTM-Attention三角拓扑聚合优化算法优化卷积神经网络-长短期记忆网络-注意力机制的数据分类预测

分类预测 | Matlab基于TTAO-CNN-LSTM-Attention三角拓扑聚合优化算法优化卷积神经网络-长短期记忆网络-注意力机制的数据分类预测 目录 分类预测 | Matlab基于TTAO-CNN-LSTM-Attention三角拓扑聚合优化算法优化卷积神经网络-长短期记忆网络-注意力机制的数据分类预测分类效果基…

CMake: 在构建世界掀起风暴

由简至繁&#xff0c;以小见大。首先&#xff0c;让我们从标准的 Gartner 技术成熟度曲线开始&#xff0c;了解 CMake 的发展&#xff0c;感受 CMake 对行业的深远影响。 图片来源&#xff1a;Gartner (我在原图基础上增加了年份) CMake 的开发从1999年开始&#xff0c;最初的…

PHP代码审计

前言 本文章主要是PHP代码审计的一些基础知识&#xff0c;包括函数的用法&#xff0c;漏洞点&#xff0c;偏向基础部分&#xff0c;个人能力有限&#xff0c;部分可能会出现错误或者遗漏&#xff0c;读者可自行补充。 代码执行 代码执行是代码审计当中较为严重的漏洞&#x…

Dgraph 入门教程三《linux本地部署》

上一章中&#xff0c;我们用的官方的Clound操作的&#xff0c;怎么在本地部署一套Dgraph呢。这一章将做详细介绍。安装有好几种方式&#xff0c;最简单的就是联网部署。因为项目需要&#xff0c;这里先不介绍和测试线上部署了&#xff0c;只介绍离线部署。 1、下载安装包 Rel…