Nebula Graph - SpringBoot 操作 Nebula
一、Nebula Graph
前面两篇文章,讲解了下 Nebula Graph 的安装,及 nGQL 的使用,本篇文章讲解下在 java 环境下如何对 Nebula Graph 进行操作,使用 SpringBoot 环境。
下面是上篇文章的地址:
https://blog.csdn.net/qq_43692950/article/details/124579284
二、SpringBoot 操作 Nebula Graph
首先引入 pom 依赖:
<dependency><groupId>com.vesoft</groupId><artifactId>client</artifactId><version>3.0.0</version> </dependency>
为方便解析 json ,这里把 fastjson 也引进来。
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version> </dependency>
配置文件中配置 Nebula 的信息,后面读取这里的配置信息。
nebula:address[0]:host: 192.168.40.130port: 9669username: rootpassword: rootreconnect: falsespace: javatest
声明 NebulaProperties 接收上面的配置信息:
@Data public class NebulaAddress {private String host;private Integer port; }
@Data @Configuration @ConfigurationProperties(prefix = "nebula") public class NebulaProperties {private List<NebulaAddress> address;private String username;private String password;private boolean reconnect;private String space; }
声明 NebulaConstant 把常用的字符串声明在这里:
public class NebulaConstant {public static final String USE = "USE ";public static final String SEMICOLON = "; ";public static final String ERROR_CODE = "-1";@Getter@AllArgsConstructorpublic enum NebulaJson{ERRORS("errors"),CODE("code"),MESSAGE("message"),RESULTS("results"),COLUMNS("columns"),DATA("data"),ROW("row");private String key;} }
声明 NebulaConfig ,初始化 NebulaPool ,及声明 Session 的获取方式:
@Slf4j @Configuration public class NebulaConfig {@Beanpublic NebulaPool nebulaPool(NebulaProperties properties) throws UnknownHostException {NebulaPool pool = new NebulaPool();NebulaPoolConfig nebulaPoolConfig = new NebulaPoolConfig();nebulaPoolConfig.setMaxConnSize(1000);boolean init = pool.init(properties.getAddress().stream().map(d -> new HostAddress(d.getHost(), d.getPort())).collect(Collectors.toList()), nebulaPoolConfig);if (!init){throw new RuntimeException("NebulaGraph init err !");}else {log.info("NebulaGraph init Success !");}return pool;}@Bean@Scope(scopeName = "prototype",proxyMode = ScopedProxyMode.TARGET_CLASS)public Session session(NebulaPool nebulaPool,NebulaProperties properties) {try {Session session = nebulaPool.getSession(properties.getUsername(), properties.getPassword(), properties.isReconnect());session.execute(StringFormatter.concat(NebulaConstant.USE, properties.getSpace(), NebulaConstant.SEMICOLON).getValue());return session;} catch (Exception e) {log.error("get nebula session err , {} ", e.toString());}return null;} }
为了方便对结果的解析,再声明一个 NebulaResult 用来接收结果:
@Data public class NebulaResult<T> {private Integer code;private String message;private List<T> data;public boolean isSuccessed(){return code == 0;} }
每次都是使用 Session 未免太麻烦,这里封装一个 NebulaTemplate 返回上面 对象 :
@Slf4j @Component public class NebulaTemplate {@ResourceSession session;public <T> NebulaResult<T> queryObject(String stmt, Class<T> tClass) {NebulaResult<T> nebulaResult = executeObject(stmt);if (Objects.isNull(nebulaResult.getData())) {return nebulaResult;}Optional.ofNullable(nebulaResult.getData()).ifPresent(data -> nebulaResult.setData(data.stream().map(d -> JSONObject.toJavaObject(((JSONObject) d), tClass)).collect(Collectors.toList())));return nebulaResult;}public NebulaResult executeObject(String stmt) {JSONObject jsonObject = executeJson(stmt);return JSONObject.toJavaObject(jsonObject, NebulaResult.class);}public JSONObject executeJson(String stmt) {JSONObject restJson = new JSONObject();try {JSONObject jsonObject = JSON.parseObject(Objects.requireNonNull(session).executeJson(stmt));JSONObject errors = jsonObject.getJSONArray(NebulaConstant.NebulaJson.ERRORS.getKey()).getJSONObject(0);restJson.put(NebulaConstant.NebulaJson.CODE.getKey(), errors.getInteger(NebulaConstant.NebulaJson.CODE.getKey()));if (errors.getInteger(NebulaConstant.NebulaJson.CODE.getKey()) != 0) {restJson.put(NebulaConstant.NebulaJson.MESSAGE.getKey(), errors.getString(NebulaConstant.NebulaJson.MESSAGE.getKey()));return restJson;}JSONObject results = jsonObject.getJSONArray(NebulaConstant.NebulaJson.RESULTS.getKey()).getJSONObject(0);JSONArray columns = results.getJSONArray(NebulaConstant.NebulaJson.COLUMNS.getKey());if (Objects.isNull(columns)) {return restJson;}JSONArray data = results.getJSONArray(NebulaConstant.NebulaJson.DATA.getKey());if (Objects.isNull(data)) {return restJson;}List<JSONObject> resultList = new ArrayList<>();data.stream().map(d -> (JSONObject) d).forEach(d -> {JSONArray row = d.getJSONArray(NebulaConstant.NebulaJson.ROW.getKey());JSONObject map = new JSONObject();for (int i = 0; i < columns.size(); i++) {map.put(columns.getString(i), row.get(i));}resultList.add(map);});restJson.put(NebulaConstant.NebulaJson.DATA.getKey(), resultList);} catch (Exception e) {restJson.put(NebulaConstant.NebulaJson.CODE.getKey(), NebulaConstant.ERROR_CODE);restJson.put(NebulaConstant.NebulaJson.MESSAGE.getKey(), e.toString());log.error("nebula execute err:", e);}return restJson;} }
测试
@RestController public class TestController {@ResourceNebulaTemplate nebulaTemplate;@GetMapping("/addVertex")public Object addJSON() throws IOErrorException {String sql = "insert vertex team(team_name, persion_num) values \"team_2\":(\"team_2\", 43);";NebulaResult nebulaResult = nebulaTemplate.executeObject(sql);return nebulaResult;}@GetMapping("/findVertex")public Object findJson2() throws IOErrorException {String sql = "lookup on team yield id(vertex) AS id,properties(vertex).persion_num AS persion_num,properties(vertex).team_name AS team_name;";NebulaResult<Info> infoNebulaResult = nebulaTemplate.queryObject(sql, Info.class);return infoNebulaResult;} }
Nebula Graph - SpringBoot 操作 Nebula相关推荐
- Nebula Graph性能测试工具——Nebula Bench实践
简介 Nebula Bench 是一款利用 LDBC 数据集对 Nebula Graph 进行性能测试的工具.本文是通过Nebula Bench进行性能测试的实践总结. 版本 CentOS 7.9 N ...
- Nebula Graph学习篇1_基础概念、初步使用、整合SpringBoot使用
目录 一.基础概念 图数据库的概念 适用场景 数据模型 路径 点的VID 架构 二.初步使用 Windows安装Nebula-Graph服务 Nebula Console 连接 Nebula-Grap ...
- model存数据_Jepsen 测试框架在图数据库 Nebula Graph 中的实践
在本篇文章中主要介绍图数据库 Nebula Graph 在 Jepsen 这块的实践. Jepsen 简介 Jepsen 是一款用于系统测试的开源软件库,致力于提高分布式数据库.队列.共识系统等的安全 ...
- 亿万级图数据库 Nebula Graph 的数据模型和系统架构设计
Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可 ...
- Nebula Graph 在企查查的应用
本文首发于 Nebula Graph Community 公众号 解决思路 解决 K8s 部署 Nebula Graph 集群后连接不上集群问题最方便的方法是将 nebula-algorithm / ...
- Nebula Graph|信息图谱在携程酒店的应用
本文首发于 Nebula Graph Community 公众号 对于用户的每一次查询,都能根据其意图做到相应的场景和产品的匹配",是携程酒店技术团队的目标,但实现这个目标他们遇到了三大问题 ...
- Nebula Graph 招募社区布道师
点击上方"开源社"关注我们 | 编辑:钱英宇.李明康 | 设计:王福政 01 Nebula Graph 社区布道师 作为一款开源的数据库产品,社区对 Nebula Graph 团队 ...
- 图数据库初探——7. 以红楼梦数据集为例进行Nebula Graph使用
文章目录 0. 关键命令 全流程 1. 基本操作 1. 图的操作 2. 插入节点和关系数据 2.0 scheme概念设计 2.1 创建schema 2.1.1 控制台创建 2.1.2 Schema创建 ...
- Nebula Graph 的 KV 存储分离原理和性能测评
本文首发于 Nebula Graph Community 公众号 1. 概述 过去十年,图计算无论在学术界还是工业界热度持续升高.相伴而来的是,全世界的数据正以几何级数形式增长.在这种情况下,对于数据 ...
- 知识图谱-基于图数据库的知识表示常用结构以及Nebula Graph的实现
目录 一.知识图谱的表示方式 1.1 特定领域的知识图谱 特点 1.2 简单的通用知识图谱 特点 补充 1.3 可自定义本体的通用知识图谱 特点 补充 二.图数据库选型 三.基于Nebula Grap ...
最新文章
- python 统计单词个数---不去重
- 创建topic验证kafka集群
- 初识遗传算法 蚁群算法
- python程序设计——函数设计与调用
- Oracle中分区表中表空间属性
- 使用Electron将Web项目打包成windows桌面应用
- 2020-09-14 编译Qt的MySQL 5.7插件: qsqlmysql.dll
- Codeforces 295 (Div.1)
- 用甘特图控件VARCHART XGantt搞定项目管理
- 泛泰 A870 TWRP Recovery En英/Cn简/Tw繁
- java截取图片截图画框
- Java 性能调优 (JVM CPU IO Memery)
- 废旧闲置的笔记本除了电脑回收,这两招也很实用!
- KB 与 kb 的区别
- 中国银行理财产品市场运行态势及投资风险透析报告2021-2027年
- 学校机房计算机网络设计,建好高校机房 从设计上需掌握三大要素
- foobar2000利用cue对ape进行分轨操作及其常见问题
- Jekins localhost:8080打不开
- python cnn 实例_在Keras中CNN联合LSTM进行分类实例
- 学习HTML5开发RPG游戏第五步游戏界面设计一
热门文章
- 腾讯微博qq说说备份导出工具_腾讯微博停止运营,赶紧申请备份吧
- Android仿QQ空间
- 傅立叶级数到傅立叶变换推导与理解
- 解读《三字经》(7)
- 市面所有机器人框架开源啦(含VX框架源码)
- 黄山市区到黄山风景区有多远,如何到黄山景区
- 五线谱音名和组别对照表_五线谱上区别各个音的组别
- VS调试C++程序,提示无法启动程序,“....exe”。系统找不到指定文件的解决方法
- 计算机三级嵌入式系统知识点考查(易错)
- c语言编译defined,#if defined(__GNUC__)的意思是不是如果使用的是GCC编译器?