当前位置: 首页 > news >正文

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的调用方式不一样,在此不做详细介绍了。其他语言的调用方式其实大通小异,需要使用的可以去官方看教程。

相关文章:

  • 力扣面试经典150 —— 6-10题
  • python异常机制
  • YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
  • 骨传导耳机怎么挑选?资深测评师一文教你搞定怎么选!
  • 外包干了8天,技术退步明显。。。。。
  • 网络编程套接字(2)——Socket套接字
  • IP传输方式——组播
  • #14vue3生成表单并跳转到外部地址的方式
  • 数据结构从入门到精通——链表
  • centos7 python3.12.1 报错 No module named _ssl
  • 【2024.03.05】定时执行专家 V7.1 发布 - TimingExecutor V7.1 Release
  • UE4 Niagara 关卡3.4官方案例解析
  • 活动预告|听云猿生数据创始人 CEO 曹伟分享云数据库行业十余年经验总结
  • 这个超火的黑客小工具,可以通过WiFi解锁特斯拉
  • 测试用例编写详解
  • ----------
  • hexo+github搭建个人博客
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 2017年终总结、随想
  • 78. Subsets
  • android 一些 utils
  • Android组件 - 收藏集 - 掘金
  • ECMAScript6(0):ES6简明参考手册
  • Java IO学习笔记一
  • k个最大的数及变种小结
  • Python_网络编程
  • Python十分钟制作属于你自己的个性logo
  • Vue.js源码(2):初探List Rendering
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 思维导图—你不知道的JavaScript中卷
  • 温故知新之javascript面向对象
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​【已解决】npm install​卡主不动的情况
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # 安徽锐锋科技IDMS系统简介
  • #Z0458. 树的中心2
  • $$$$GB2312-80区位编码表$$$$
  • (3)选择元素——(17)练习(Exercises)
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (js)循环条件满足时终止循环
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)hibernate配置管理
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)http协议
  • (转)nsfocus-绿盟科技笔试题目