隐藏在 Nebula Graph 背后的星辰大海
作者介绍
大家好,我是 Anyzm,graph-ocean(GitHub:https://github.com/nebula-contrib/graph-ocean)项目发起人,目前就职于 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.com.cn/t/topic/1172)便知道我们在 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 小助手会拉你进群~~
隐藏在 Nebula Graph 背后的星辰大海的更多相关文章
- GraphX 在图数据库 Nebula Graph 的图计算实践
不同来源的异构数据间存在着千丝万缕的关联,这种数据之间隐藏的关联关系和网络结构特性对于数据分析至关重要,图计算就是以图作为数据模型来表达问题并予以解决的过程. 一.背景 随着网络信息技术的飞速发展,数 ...
- 解析 Nebula Graph 子图设计及实践
本文首发于 Nebula Graph 公众号 NebulaGraphCommunity,Follow 看大厂图数据库技术实践. 前言 在先前的 Query Engine 源码解析中,我们介绍了 2.0 ...
- 图数据库 Nebula Graph 的数据模型和系统架构设计
Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,而且能够提供极高的 ...
- Nebula Graph 技术总监陈恒:图数据库怎么和深度学习框架进行结合?
引子 Nebula Graph 的技术总监在 09.24 - 09.30 期间同开源中国·高手问答的小伙伴们以「图数据库的设计和实践」为切入点展开讨论,包括:「图数据库的存储设计」.「图数据库的计算设 ...
- 使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink
前言 本文由 Nebula Graph 实习生@王杰贡献. 最近 @Yener 开源了史上最大规模的中文知识图谱--OwnThink(链接:https://github.com/ownthink/Kn ...
- 分布式图数据库 Nebula Graph 中的集群快照实践
1 概述 1.1 需求背景 图数据库 Nebula Graph 在生产环境中将拥有庞大的数据量和高频率的业务处理,在实际的运行中将不可避免的发生人为的.硬件或业务处理错误的问题,某些严重错误将导致集群 ...
- 使用 Docker 构建 Nebula Graph 源码
Nebula Graph 介绍 Nebula Graph 是开源的高性能分布式图数据库.项目使用 C++ 语言开发,cmake 工具构建.其中两个重要的依赖是 Facebook 的 Thrift RP ...
- 图数据库 Nebula Graph 的安装部署
Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可 ...
- 使用图数据库 Nebula Graph 数据导入快速体验知识图谱
本文由 Nebula Graph 实习生@王杰贡献. 最近 @Yener 开源了史上最大规模的中文知识图谱——OwnThink(链接:https://github.com/ownthink/Knowl ...
- 分布式图数据库 Nebula Graph 的 Index 实践
导读 索引是数据库系统中不可或缺的一个功能,数据库索引好比是书的目录,能加快数据库的查询速度,其实质是数据库管理系统中一个排序的数据结构.不同的数据库系统有不同的排序结构,目前常见的索引实现类型如 B ...
随机推荐
- 使用Ant Design Vue的select搜索框出现的问题
Select 选择器进行搜索 <template> <div> <a-form-item label="分类:"> <a-select p ...
- go多版本管理
在日常开发工作过程中,很多时候我们都需要在自己的机器上安装多个go版本,像是go1.16引入的embed,go1.18引入了泛型:又或是自己本地使用的是最新版,但公司的项目中使用的go1.14.go1 ...
- 《PalWorld/幻兽帕鲁》旧电脑linux搭建服务器
关键词: PalWorld, Linux, Natapp, 内网穿透, 幻兽帕鲁 注 意 文 章 时 效 性 最近幻兽帕鲁爆火,steam一上线好友列表一串正在游玩哈哈哈,自己也是蹭一波热度,顺便试用 ...
- 4.6 Windows驱动开发:内核遍历进程VAD结构体
在上一篇文章<内核中实现Dump进程转储>中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍VAD结构,该结构的全程是Virtual Address Descriptor即虚 ...
- C/C++ 反汇编:针对加减乘除的还原
算术运算通常是指,加减乘除四则运算,而计算机中的四则运算与数学中的有所不同,同样是实现算术运算,高级语言与汇编语言的实现思路完全不同,往往一个简单的减法运算,都要几条指令的配合才能得出计算结果,而为了 ...
- LyScript 实现Hook改写MessageBox
LyScript 可实现自定义汇编指令的替换功能,用户可以自行编写一段汇编指令,将程序中特定的通用函数进行功能改写与转向操作,此功能原理是简单的Hook操作. 插件地址:https://github. ...
- 2022 多益网络hr面
不知道为啥 我的一面是hr面试,面试官是一个小姐姐,整个面试过程还是比较轻松的 废话不多说,直接上题目 自我介绍(巴拉巴拉巴拉...) 有参与过什么团队协作项目吗,担任了一个什么样的角色,怎么分配任务 ...
- 案例:推进GTID解决MySQL主主不同步问题
之前文章介绍过MySQL修改lower_case_table_names参数,如果之前大写存储的表将无法识别,需要特殊处理. 最近遇到一例应用开发人员在修改这个参数之后,为了清除之前大写存储的表,做了 ...
- Linux--Vi编辑命令(跳到指定行、翻屏、缩进)
1.设置行号 如果编辑后,又想显示行号,同样操作按一下esc键,并输入:(冒号),输入set number ,并按回车键,完成后即显示行号. 不需要显示行号,同样操作按一下esc键,并输入:(冒 ...
- VMware 虚拟机一键去虚拟化工具
前言: 如果你想在 VMware 虚拟机里面多开玩游戏的话,但是现在大多数网游都会检测是否虚拟机,进入游戏被检测到在虚拟机中运行,游戏可能直接闪退.所以就得对 VMware 虚拟机进行去除虚拟化. 原 ...