Nebula Graph 的技术总监在 09.24 - 09.30 期间同 开源中国·高手问答 的小伙伴们以「图数据库的设计和实践」为切入点展开讨论,包括:「图数据库的存储设计」、「图数据库的计算设计」、「图数据库的架构设计」等方面内容,本文整理于他和开源中国小伙伴对图数据库的讨论内容~python
陈恒,开源的分布式图数据库 Nebula Graph 技术总监,图数据库领域专家 & HBase Committer。北京邮电大学硕士,曾就任于蚂蚁金服、猿题库、网易等公司,一直从事基础设施相关研发工做。ios
Stiofan: 图数据库打破了关系数据库的这种古老数据存储模式,将图形化特性属性数据存入,可是关于这些特性化属性的数据使用图数据库和将其转换为类型数据放入深度学习框架,两个之间的关系或者说使用场景应如何来规划。git
咱们见过一些机器学习使用图数据库的 case,最主要的是 feature extraction 阶段,使用图数据库来拿到当前点相关联的点的一些属性做为 feature,或者产生一些随机游走的路径,使用图数据库能够大大加速整个过程。github
钛元素: 恒大你好,我对图数据库不是很明白,是否能够这样理解:它能够被认为是 MySQL 中的一种数据库引擎,具有特殊的查询功能,以及特殊的数据结构?谢谢。docker
不是特别准确, 图数据库是为了网络结构的数据(好比社交网络,资金网络等)而专门设计的一类数据库。 这类的数据库有着本身独特的数据组织形式, 以及本身独特的查询语句。 它并非 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 个问题想请教一下: 一、Neo4j 社区版的单节点限制问题,目前看 Nebula 应该不存在相似问题,不知道这样理解是否正确? 二、Nebula 支持类 SQL 查询,是否有相关 JDBC 驱动可使用?目前看 GitHub上貌似没有,后期是否会支持? 三、官方文档 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:一个开源的分布式图数据库。