一、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相关推荐

  1. Nebula Graph性能测试工具——Nebula Bench实践

    简介 Nebula Bench 是一款利用 LDBC 数据集对 Nebula Graph 进行性能测试的工具.本文是通过Nebula Bench进行性能测试的实践总结. 版本 CentOS 7.9 N ...

  2. Nebula Graph学习篇1_基础概念、初步使用、整合SpringBoot使用

    目录 一.基础概念 图数据库的概念 适用场景 数据模型 路径 点的VID 架构 二.初步使用 Windows安装Nebula-Graph服务 Nebula Console 连接 Nebula-Grap ...

  3. model存数据_Jepsen 测试框架在图数据库 Nebula Graph 中的实践

    在本篇文章中主要介绍图数据库 Nebula Graph 在 Jepsen 这块的实践. Jepsen 简介 Jepsen 是一款用于系统测试的开源软件库,致力于提高分布式数据库.队列.共识系统等的安全 ...

  4. 亿万级图数据库 Nebula Graph 的数据模型和系统架构设计

    Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可 ...

  5. Nebula Graph 在企查查的应用

    本文首发于 Nebula Graph Community 公众号 解决思路 解决 K8s 部署 Nebula Graph 集群后连接不上集群问题最方便的方法是将 nebula-algorithm / ...

  6. Nebula Graph|信息图谱在携程酒店的应用

    本文首发于 Nebula Graph Community 公众号 对于用户的每一次查询,都能根据其意图做到相应的场景和产品的匹配",是携程酒店技术团队的目标,但实现这个目标他们遇到了三大问题 ...

  7. Nebula Graph 招募社区布道师

    点击上方"开源社"关注我们 | 编辑:钱英宇.李明康 | 设计:王福政 01 Nebula Graph 社区布道师 作为一款开源的数据库产品,社区对 Nebula Graph 团队 ...

  8. 图数据库初探——7. 以红楼梦数据集为例进行Nebula Graph使用

    文章目录 0. 关键命令 全流程 1. 基本操作 1. 图的操作 2. 插入节点和关系数据 2.0 scheme概念设计 2.1 创建schema 2.1.1 控制台创建 2.1.2 Schema创建 ...

  9. Nebula Graph 的 KV 存储分离原理和性能测评

    本文首发于 Nebula Graph Community 公众号 1. 概述 过去十年,图计算无论在学术界还是工业界热度持续升高.相伴而来的是,全世界的数据正以几何级数形式增长.在这种情况下,对于数据 ...

  10. 知识图谱-基于图数据库的知识表示常用结构以及Nebula Graph的实现

    目录 一.知识图谱的表示方式 1.1 特定领域的知识图谱 特点 1.2 简单的通用知识图谱 特点 补充 1.3 可自定义本体的通用知识图谱 特点 补充 二.图数据库选型 三.基于Nebula Grap ...

最新文章

  1. python 统计单词个数---不去重
  2. 创建topic验证kafka集群
  3. 初识遗传算法 蚁群算法
  4. python程序设计——函数设计与调用
  5. Oracle中分区表中表空间属性
  6. 使用Electron将Web项目打包成windows桌面应用
  7. 2020-09-14 编译Qt的MySQL 5.7插件: qsqlmysql.dll
  8. Codeforces 295 (Div.1)
  9. 用甘特图控件VARCHART XGantt搞定项目管理
  10. 泛泰 A870 TWRP Recovery En英/Cn简/Tw繁
  11. java截取图片截图画框
  12. Java 性能调优 (JVM CPU IO Memery)
  13. 废旧闲置的笔记本除了电脑回收,这两招也很实用!
  14. KB 与 kb 的区别
  15. 中国银行理财产品市场运行态势及投资风险透析报告2021-2027年
  16. 学校机房计算机网络设计,建好高校机房 从设计上需掌握三大要素
  17. foobar2000利用cue对ape进行分轨操作及其常见问题
  18. Jekins localhost:8080打不开
  19. python cnn 实例_在Keras中CNN联合LSTM进行分类实例
  20. 学习HTML5开发RPG游戏第五步游戏界面设计一

热门文章

  1. 腾讯微博qq说说备份导出工具_腾讯微博停止运营,赶紧申请备份吧
  2. Android仿QQ空间
  3. 傅立叶级数到傅立叶变换推导与理解
  4. 解读《三字经》(7)
  5. 市面所有机器人框架开源啦(含VX框架源码)
  6. 黄山市区到黄山风景区有多远,如何到黄山景区
  7. 五线谱音名和组别对照表_五线谱上区别各个音的组别
  8. VS调试C++程序,提示无法启动程序,“....exe”。系统找不到指定文件的解决方法
  9. 计算机三级嵌入式系统知识点考查(易错)
  10. c语言编译defined,#if defined(__GNUC__)的意思是不是如果使用的是GCC编译器?