OrientDB API 高性能的文档、图数据库开源项目

我要开发同款
匿名用户2023年03月30日
175阅读

技术信息

开源地址
https://gitee.com/hyxl-520/orientdb-api
授权协议
MulanPSL-2.0

作品详情

OrietDB是一款高性能的文档、图数据库,在关系查找、遍历方面有很大的速度优势,特别是处理传统关系型数据库中的joi操作,图数据库具有无法比拟的优点。虽然OrietDB官方提供了Java的SDK,但是还是有一定的学习成本,需要手撸操作脚本,本仓库对OrietDB的JavaSDK进行了二次封装,以更加自然的语言操作OrietDB,降低学习成本,使得项目能更快的集成OrietDB。

特性更简单的API :话不多说上例子感受,假如我们要保存一个People对象到图数据库,先看看原生的SDK例子:

publicstaticvoidmai(Strig[]args){//使用原生JDK保存一个“人”顶点到图数据库Peoplepeople1=ewPeople("张三","男",18);try(ODatabaseSessiosessio=OrietSessioFactory.getIstace().getSessio()){//在图数据库创建Class:Peopleif(sessio.getClass("People")==ull){sessio.createVertexClass("People");}OVertexvertex=sessio.ewIstace();vertex.setProperty("ame",people1.getName());vertex.setProperty("age",people1.getAge());vertex.save();}}原生的SDK将顶点封装成了Overtex对象,首先需要先获取会话ODatabaseSessio,并且创建对应的顶点类,然后将实体相关的属性需要调用setProperty方法存入进去,并且保存,还要要留意关闭会话,对于属性多、数量多的实体简直是灾难,下面我们来看看使用OrietDBAPI:

publicstaticvoidmai(Strig[]args){//创建实体对象Peoplepeople2=ewPeople("李四","男",21);//将实体对象包装成ResourceNode对象,其提供了对顶点的操作,对边的操作在ResourceRelatio里ResourceNode<People>li=ewGraphResourceNode<>(people2);//直接调用save方法进行保存li.save();}@Getter@Setter@ToStrig//实现Vertex语义接口,表明该实体是一个图数据库的顶点对象publicclassPeopleimplemetsVertex{privateStrigame;privateStrigsex;privateItegerage;publicPeople(Strigame,Strigsex,Itegerage){this.ame=ame;this.sex=sex;this.age=age;}publicPeople(){}}

如上图,通过上面的语句就将实体对象People1存入了OrietDB。

更优雅的查询 :原生SDK的查询难免会跟OrietDB的SQL语句或者Match语句打交道,而且国内的中文文档很少和相关博客也很少,学习成本进一步加大,因此OrietDBAPI对常用查询操作进行了封装,做到完全透明化,下面我们来看一个示列:使用原生SDK进行查询:

publicstaticvoidmai(Strig[]args){try(ODatabaseSessiosessio=OrietSessioFactory.getIstace().getSessio()){OResultSetresultSet=sessio.query("select*fromPeoplewhereame=?","李四");Peoplepeople=ewPeople();while(resultSet.hasNext()){OResultresult=resultSet.ext();people.setName(result.getProperty("ame"));people.setAge(result.getProperty("age"));}resultSet.close();}}原生JDK使用起来跟JDBC差不多,体验差,下面看看OrietDBAPI查询:

publicstaticvoidmai(Strig[]args){//创建资源图对象,其提供了很多对图的直接操作。使用OrietDB存储库(后续可以拓展Neo4j等存储库)ResourceGraphgraph=ewResourceGraph(ewOrietDBRepository());//调用extractNode方法取出指定节点ResourceNode<People>peopleResourceNode=graph.extractNode(QueryParamsBuilder.ewIstace().addParams("ame","李四").getParams());//获取节点对应的属性实体Peoplepeople=peopleResourceNode.getSource();}更人性化的遍历 :单一的查询肯定不能满足实际的需要,OrietDB提供了图的遍历,支持更复杂的查询,通过遍历我们能找到与任意一个节点有某种关系的其他节点,使用原生SDK如下:

publicstaticvoidmai(Strig[]args){try(ODatabaseSessiosessio=OrietSessioFactory.getIstace().getSessio()){//从顶点#74:0出发,深度优先遍历7层以内的同学,并且进行分页OResultSetresultSet=sessio.query("select*from(traverse*from#74:0MAXDEPTH7STRATEGYDEPTH_FIRST)where(@class=\"Classmate\")skip0limit10");List<ClassMates>classMates=ewArrayList<>();while(resultSet.hasNext()){ClassMatesclassMate=ewClassMates(ull);OResultresult=resultSet.ext();classMate.setDate(result.getProperty("date"));//...classMates.add(classMate);}resultSet.close();}}使用OrietDBAPI

publicstaticvoidmai(Strig[]args){//创建资源图对象,其提供了很多对图的直接操作。使用OrietDB存储库(后续可以拓展Neo4j等存储库)ResourceGraphgraph=ewResourceGraph(ewOrietDBRepository());//直接调用traverse方法,参数分别是,出发节点、深度、遍历策略、分页配置、目标实体类型PagedResult<ResourceNode<?extedsVertex>>result=graph.traverse(graph.extractNode("#74:0"),QueryParamsBuilder.ewIstace().getParams(),7,TraverseStrategy.DEPTH_FIRST,ewPageCofig(1,10,true),ClassMates.class);result.getSources().forEach(item->System.out.pritl(item.getSource()));}无需语句,透明化,更人性化。

功能介绍

OrientDB 是一款高性能的文档、图数据库,在关系查找、遍历方面有很大的速度优势,特别是处理传统关系型数据库中的join操作,图数据库具有无法比拟的优点。虽然OrientDB官方提供了Jav...

示例图片

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论