Nebula Graph 的技术总监在 09.24 - 09.30 期间同开源中国·高手问答的小伙伴们以「图数据库的设计和实践」为切入点展开讨论,包括:「图数据库的存储设计」、「图数据库的计算设计」、「图数据库的架构设计」等方面内容,本文整理于他和开源中国小伙伴对图数据库的讨论内容~
陈恒,开源的分布式图数据库 Nebula Graph 技术总监,图数据库领域专家 & HBase Committer。北京邮电大学硕士,曾就职于蚂蚁金服、猿题库、网易等公司,一直从事基础设施相关研发工作。
Stiofan: 图数据库打破了关系数据库的这种古老数据存储模式,将图形化特性属性数据存入,但是关于这些特性化属性的数据使用图数据库和将其转换为类型数据放入深度学习框架,两个之间的关系或者说使用场景应如何来规划。
我们见过一些机器学习使用图数据库的 case,最主要的是 feature extraction 阶段,使用图数据库来拿到当前点相关联的点的一些属性作为 feature,或者产生一些随机游走的路径,使用图数据库可以大大加速整个过程。
钛元素: 恒大你好,我对图数据库不是很明白,是否可以这样理解:它可以被认为是 MySQL 中的一种数据库引擎,具备特殊的查询功能,以及特殊的数据结构?谢谢。
不是特别准确,图数据库是为了网络结构的数据(比如社交网络,资金网络等)而专门设计的一类数据库。这类的数据库有着自己独特的数据组织形式,以及自己独特的查询语句。它并不是 MySQL 中的一种存储引擎,而是一个独立的产品,就像 HBase 与 MySQL 的关系一样。
开源中国·sixliu 小伙伴补充:你可以这样理解,原先这些数据都是用关系数据库存的,分别为主体表和关系表,但是在应用使用时查询性能,比如查 n 度关系。所以为了提升查询使用图数据库天然符合,节点 (主体) 和边 (关系),比如说要查 A 的 2 度关系,那么通过 id 直接 key 匹配到 A,然后再获取到路径 <=2 的节点就可以获得结果。
5G 加 ios: Nebula 和 Neo4j 的图数据库的优势和劣势?为何要新开发使用 Nebula??
Neo4j 是目前市面上知名度最高的图数据库,是一款非常优秀的产品。但是开源的 Neo4j 最大的问题在于它是一款单机数据库,扩展能力存在比较大的问题。Nebula 是在互联网公司的长期实践中诞生的一款产品,相比于 Neo4j,Nebula 最大的特色便是分布式的架构,扩展性要好很多。
crf1111:
你好,最近在开发分布式任务处理系统,使用到了有向无环图(DAG)的概念。请问,图数据库目前主要用于哪些应用场景。
对于Nebula
,目前提供了几种 client 库,是否能兼容 python-networkx 中的 Graph 对象?
图数据库主要应用于网络结构数据的存储与查询,比如在社交关系中,查找一个人的 N 度好友(可以带一些过滤条件),用传统的关系数据库来搞,不仅性能不能满足要求,还会使用很复杂的 SQL 描述,对于用户十分不友好。而在图数据库中,这样的查询就是一条语句而已。 当前 Nebula 提供了 Go / Java / C++ / Python 的 client,对于其他语言可以直接使用 thrift 生成相应的接口。而我们的 Python client 能链接 Nebula Graph,执行相应的 nGQL 语句,暂时不支持 python-networkx 中的 Graph 对象。
KelvinQ: 请问图数据库和一般数据库结构相比,优势在哪里?
Everything is connected. 图数据库天生适合表达 connection,或者说多对多的关系。图数据库可以很高效的查询几度关系,而传统关系型数据库不擅长,一般都需要做表连接,表连接是一个很昂贵的操作,涉及到大量的 IO 操作及内存消耗。当然,文档、关系型数据库和图数据库相互可借鉴点还是非常多的。
Li_Peng: 您好,最近刚开始注意到 Nebula,有 3 个问题想请教一下: 1、Neo4j 社区版的单节点限制问题,目前看 Nebula 应该不存在类似问题,不知道这样理解是否正确? 2、Nebula 支持类 SQL 查询,是否有相关 JDBC 驱动可以使用?目前看 GitHub 上貌似没有,后期是否会支持? 3、官方文档 https://docs.nebula-graph.io/manual-index/ 地址打开有点慢,目前是否有微信或者钉钉群可以交流?
- 是的,Nebula 相比于 Neo4j 最大的优势便在于分布式的设计。
- 目前我们使用的是 thrift rpc 进行 client 与 server 的通信。对于 JDBC 的支持,如果客户的需求比较强烈,会考虑提供支持。
- 可以关注我们的微信公众号 NebulaGraphCommunity,里面有微信交流群,可以添加我们的小助手进群:NebulaGraphbot
长眉欧巴: 想问个跨界的问题,貌似目前的数据库走存算分离的路线,而硬件方面却走存算一体的路线,比如类脑芯片,参考人类大脑神经系统的功能。神经元是存算一体的(虽然还没定论,但这更可能)。而图数据库的结构天生跟神经系统有异曲同工之妙,到最后是不是更应该也存算一体?
所谓的存储计算分离,也没有说完全分割,比如说在 Nebula 里面,很多的计算其实是在存储层完成的,也就是所谓的计算下推。 之所以采用存储计算分离的架构,主要是为了扩展性和上云的考虑。
开源中国·sixliu 小伙伴补充:可以把它理解成之前 存储过程完成复杂逻辑->应用层完成逻辑。主要就是为了满足高容错和可扩展。存储层只要提供高度抽象的谓词下推即可。
myw31415926: 陈大,您好。Nebula 的高度可扩展包含哪些,能说明一下吗?存储层是否还支持其他类型的数据库,如 Oracle 和 PostgreSQL?多谢
Nebula 采用了存储计算分离的架构,对于计算层,因为是无状态服务,可以随意扩容。对于存储层,我们提供了扩容相关的运维语句,可以比较简单的扩容。存储层支持 storage plugin,目前已经有 HBase 的 plugin,其他的 plugin 也可以根据需求来支持。但是我们并不推荐在关系型数据库上使用图数据库,因为这样的效率会非常低,扩展起来也会很麻烦。
海参拉面: 老师,图数据库是基于现在已有的数据库产品衍生出来的吗?怎么设计呢?
图这种关联关系和相应的需求其实很早很早就有了,只是各种技术上的原因。 以前大家只能用关系型数据库来存储,但是这样需要使用者把关联关系适配成表结构,并不直观,所以图数据库也是这样发展出来的。 关于怎么设计,其实参考了很多 SQL,NoSQL 和各种分布式系统的工程实现,欢迎阅读 Nebula 的系列技术文章。
JIANGGuo: 你好,请问图数据库作为 NoSQL 中的一类,底层都是图数据结构来存储的,为什么没有通用的图查询语言呢,Nebula Graph 用 nGQL,Neo4j 用 Cypher ?谢谢。
很好的问题。 我觉得最大的原因是图数据库比较新,各家的产品应对的场景也不尽相同,所以到现在也没有产生统一的图查询语言。
荒野刀客: 图数据库是否适合存储树形的数据,比如树形目录? Nebula 和 Neo4j 相比,语法是否兼容,是否容易切换?
数据结构上来说,树是图的子集。只是单纯树的业务场景不多,我碰到过的树的场景主要是数据仓库里面的数据血缘。 Nebula 语法上和 Neo4j 接近,但并不兼容。我们设计时语法更接近 SQL,你可以下个 Docker 试试,我觉得花个 15 分钟,应该能熟悉语法了。
图数据库猫: 数据库 Nebula Graph 可以安装在 Win7 64 上吗?CentOS 的版本有要求吗?
建议安装在 Linux 服务器上。如果是 Windows 环境,可以下载一个 Docker 试用,https://hub.docker.com/r/vesoft/nebula-graph. CentOS 建议版本是 7.5+
最后是 Nebula 的 GitHub 地址,欢迎大家试用,有什么问题可以向我们提 issue。
GitHub 地址:https://github.com/vesoft-inc/nebula ,加入 Nebula Graph 交流群,请联系 Nebula Graph 官方小助手微信号:NebulaGraphbot
Nebula Graph:一个开源的分布式图数据库。
GitHub:https://github.com/vesoft-inc/nebula