本文首发于 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 小助手会拉你进群~~