乐趣区

关于图数据库:隐藏在-Nebula-Graph-背后的星辰大海

本文首发于 Nebula Graph Community 公众号

作者介绍

大家好,我是 Anyzm,graph-ocean(GitHub:https://github.com/nebula-con…)我的项目发起人,目前就任于 360 数科,岗位是高级 JAVA 开发工程师。

介绍完本人,这里来介绍下 graph-ocean 是什么?

graph-ocean 简介

graph-ocean 是一款基于 nebula-java 客户端的 ORM(Object Relational Mapping)框架,相熟 ORM 的小伙伴应该都晓得 ORM 是创立可在编程语言里应用的“虚构对象数据库”,让开发人员更高效地开发业务。

而我将 Java ORM 取名为 graph-ocean 源自 Ocean 与 Nebula Graph 的 Nebula(星辰)相响应,意为星辰大海。

为什要设计一款 Java ORM

社区用户如果对 360 数科相熟的话,读过咱们技术团队写的《JanusGraph 到 NebulaGraph 迁徙》(链接:https://discuss.nebula-graph….)便晓得咱们在 Nebula Graph 很晚期便开始应用它,在官网正式公布 v1.0.0 之前就曾经在测试环境跑起来了。

在 360 数科应用 Nebula Graph v1.0.0 过程中,咱们 Java 客户端是用枚举来呈列用到的 Tag 和 Edge 数据,而将 API 解析成 nGQL 的过程中也强依赖枚举, 对业务代码侵入性强

所以,在起初接触我的项目的过程中我就信心扭转这种场面。

解决代码入侵问题

咱们都晓得无论是什么框架与数据库连贯,框架最终都是会解析成数据库所能辨认的语言。对于 Nebula Graph 而言,用户能够应用 openCypher,也能够应用 Nebula Graph 原生查询语言 nGQL。

在咱们我的项目中习惯于应用 nGQL,所以将业务代码解析成 nGQL 这一步骤在应用 v1.0.0 的过程中曾经实现了很大一部分。业务代码侵入性的个性是因为顶点和边的枚举所带来的,枚举的作用是定位 Tag 或者 Edge,而想要从实体类上无侵入地获取这些信息,我想到了模拟 JPA(Java Persistence API)注解的形式。

于是,graph-ocean 在脑海中便有了初步模样,实体类一旦确定,对应的 Tag 或者 Edge 应该也是确定的,所以能够用到缓存来进步性能。

(整体设计图)

简略设计之后,graph-ocean 就诞生了。开发进去之后,我和共事们用起来都感觉很爽,于是便决定将框架开源进去反哺给社区。

graph-ocean 个性

graph-ocean 能够让开发者更加优雅、更加灵便地对 Nebula Graph 读写,并且能够帮忙咱们疾速地将实体和数据库数据实现互转(这也是 ORM 框架的特点),同时因为有缓存存在,所以性能方面也不用放心。

graph-ocean 的简略应用

graph-ocean 是由 Java 注解、反射、缓存、字符串拼接、nebula-java 连接池、session 治理等局部组成的。使用者如果有纯熟的反射和连接池的开发教训就能够疾速上手了,如果没有也没关系,次要抓住 NebulaSessionPoolManager(session 治理)、GraphMapper(根底的数据库操作类)、@GraphEdge(边注解)、@GraphVertex(顶点注解)、@GraphProperty(属性注解)、GraphQuery(查问 API)、QueryResult(查问后果)这几个类或者接口就能够了。

graph-ocean 的将来布局

graph-ocean 目前还未反对 Nebula Graph 所有的内置函数(不过也曾经满足大部分业务场景),因为 graph-ocean 依赖 nebula-java,所以随着 nebula-java 的版本更替,graph-ocean 也须要长期保护版本问题。

因为 graph-ocean 目前根本是由我一人在保护,文档也还不齐全,还有很多须要欠缺的点。

所以,下阶段是逐步完善应用文档,以及欠缺 API,同时心愿有更多气味相投的人一起参加进来,保护 graph-ocean 这片星辰大海。


交换图数据库技术?退出 Nebula 交换群请先填写下你的 Nebula 名片,Nebula 小助手会拉你进群~~

退出移动版