引子

Nebula Graph 的技术总监在 09.24 - 09.30 期间同开源中国·高手问答的小伙伴们以「图数据库的设计和实践」为切入点展开讨论,包括:「图数据库的存储设计」、「图数据库的计算设计」、「图数据库的架构设计」等方面内容,本文整理于他和开源中国小伙伴对图数据库的讨论内容~

嘉宾·陈恒介绍

陈恒,开源的分布式图数据库 Nebula Graph 技术总监,图数据库领域专家 & HBase Committer。北京邮电大学硕士,曾就职于蚂蚁金服、猿题库、网易等公司,一直从事基础设施相关研发工作。

本文目录

  • 图数据库怎么和深度学习框架进行结合?
  • 图数据库它可以被认为是 MySQL 中的一种数据库引擎,具备特殊的查询功能,以及特殊的数据结构?
  • Nebula 和 Neo4j 的图数据库的优势和劣势?为何要新开发使用 Nebula ?
  • 图数据库目前主要用于哪些应用场景?
  • 图数据库和一般数据库结构相比,优势在哪里?
  • Nebula 的实践问题
  • 存储计算分离
  • Nebula 高度可扩展具体指的是什么?存储层是否还支持其他类型的数据库?
  • 「图数据库」是基于已有数据库衍生出来的产品吗?如何设计图数据库?
  • 图数据库为何没有通用的图查询语言?
  • 图数据库适合存储什么类型数据,比如树形目录?
  • Nebula 的部署安装配置要求是什么?

图数据库怎么和深度学习框架进行结合?

Stiofan:
图数据库打破了关系数据库的这种古老数据存储模式,将图形化特性属性数据存入,但是关于这些特性化属性的数据使用图数据库和将其转换为类型数据放入深度学习框架,两个之间的关系或者说使用场景应如何来规划。

我们见过一些机器学习使用图数据库的 case,最主要的是 feature extraction 阶段,使用图数据库来拿到当前点相关联的点的一些属性作为 feature,或者产生一些随机游走的路径,使用图数据库可以大大加速整个过程。

图数据库它可以被认为是 MySQL 中的一种数据库引擎,具备特殊的查询功能,以及特殊的数据结构?

钛元素:
恒大你好,我对图数据库不是很明白,是否可以这样理解:它可以被认为是 MySQL 中的一种数据库引擎,具备特殊的查询功能,以及特殊的数据结构?谢谢。

不是特别准确, 图数据库是为了网络结构的数据(比如社交网络,资金网络等)而专门设计的一类数据库。 这类的数据库有着自己独特的数据组织形式, 以及自己独特的查询语句。 它并不是 MySQL 中的一种存储引擎, 而是一个独立的产品,就像 HBase 与 MySQL 的关系一样。

开源中国·sixliu 小伙伴补充:你可以这样理解,原先这些数据都是用关系数据库存的,分别为主体表和关系表,但是在应用使用时查询性能,比如查 n 度关系。所以为了提升查询使用图数据库天然符合,节点(主体)和边(关系),比如说要查 A 的 2 度关系,那么通过 id 直接 key 匹配到 A,然后再获取到路径 <=2 的节点就可以获得结果。

Nebula 和 Neo4j 的图数据库的优势和劣势?为何要新开发使用 Nebula ?

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 操作及内存消耗。当然,文档、关系型数据库和图数据库相互可借鉴点还是非常多的。

Nebula 的实践问题

Li_Peng :
您好,最近刚开始注意到 Nebula,有 3 个问题想请教一下:
1、Neo4j 社区版的单节点限制问题,目前看 Nebula 应该不存在类似问题,不知道这样理解是否正确?
2、Nebula 支持类 SQL 查询,是否有相关 JDBC 驱动可以使用?目前看 GitHub上貌似没有,后期是否会支持?
3、官方文档 https://docs.nebula-graph.io/manual-index/ 地址打开有点慢,目前是否有微信或者钉钉群可以交流?

  1. 是的, Nebula 相比于 Neo4j 最大的优势便在于分布式的设计。
  2. 目前我们使用的是 thrift rpc 进行 client 与 server 的通信。对于JDBC 的支持,如果客户的需求比较强烈,会考虑提供支持。
  3. 可以关注我们的微信公众号 NebulaGraphCommunity, 里面有微信交流群,可以添加我们的小助手进群:NebulaGraphbot

存储计算分离

长眉欧巴:
想问个跨界的问题,貌似目前的数据库走存算分离的路线,而硬件方面却走存算一体的路线,比如类脑芯片,参考人类大脑神经系统的功能。神经元是存算一体的(虽然还没定论,但这更可能)。而图数据库的结构天生跟神经系统有异曲同工之妙,到最后是不是更应该也存算一体?

所谓的存储计算分离,也没有说完全分割,比如说在 Nebula 里面,很多的计算其实是在存储层完成的,也就是所谓的计算下推。
之所以采用存储计算分离的架构,主要是为了扩展性和上云的考虑。

开源中国·sixliu 小伙伴补充:可以把它理解成之前 存储过程完成复杂逻辑->应用层完成逻辑。主要就是为了满足高容错和可扩展。存储层只要提供高度抽象的谓词下推即可。

Nebula 高度可扩展具体指的是什么?存储层是否还支持其他类型的数据库?

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 的部署安装配置要求是什么?

图数据库猫:
数据库 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

知乎:https://www.zhihu.com/org/nebulagraph/posts

微博:https://weibo.com/nebulagraph

Nebula Graph 技术总监陈恒:图数据库怎么和深度学习框架进行结合?的更多相关文章

  1. 一图看懂深度学习框架对比----Caffe Torch Theano TensorFlow

      Caffe Torch Theano TensorFlow Language C++, Python Lua Python Python Pretrained Yes ++ Yes ++ Yes ...

  2. 图数据库 Nebula Graph 是什么

    图数据库(英语:Graph Database)是一个使用图结构进行语义查询的数据库.该系统的关键概念是图,形式上是点 (Node 或者 Vertex) 和边 (Edge 或者 Relationship ...

  3. 分布式图数据库 Nebula RC2 发布:增强了 CSV Importer 功能

    Nebula Graph 是开源的分布式图数据库,可应用于知识图谱.社交推荐.风控.IoT 等场景. 本次 RC2 主要新增 GO FROM ... REVERSELY 和 GROUP BY 等语句, ...

  4. 让AI简单且强大:深度学习引擎OneFlow技术实践

    本文内容节选自由msup主办的第七届TOP100summit,北京一流科技有限公司首席科学家袁进辉(老师木)分享的<让AI简单且强大:深度学习引擎OneFlow背后的技术实践>实录. 北京 ...

  5. 华为云ModelArts图深度学习,学习知识还能考取微认证

    作为人工智能最前沿的技术之一,图深度学习被公认是人工智能认识世界实现因果推理的关键,也是深度学习未来发展的方向.但深度学习对图数据模型的支持性差一直是众多研究者难以攻克的难点,因此图深度学习在实际生产 ...

  6. 分布式图数据库 Nebula Graph 的 Index 实践

    导读 索引是数据库系统中不可或缺的一个功能,数据库索引好比是书的目录,能加快数据库的查询速度,其实质是数据库管理系统中一个排序的数据结构.不同的数据库系统有不同的排序结构,目前常见的索引实现类型如 B ...

  7. COSCon'19 | 如何设计新一代的图数据库 Nebula

    11 月 2 号 - 11 月 3 号,以"大爱无疆,开源无界"为主题的 2019 中国开源年会(COSCon'19)正式启动,大会以开源治理.国际接轨.社区发展和开源项目为切入点 ...

  8. Nebula Graph 在企查查的应用

    本文首发于 Nebula Graph Community 公众号 背景 企查查是企查查科技有限公司旗下的一款企业信用查询工具,旨在为用户提供快速查询企业工商信息.法院判决信息.关联企业信息.法律诉讼. ...

  9. Nebula Graph 在网易游戏业务中的实践

    本文首发于 Nebula Graph Community 公众号 当游戏上知识图谱,网易游戏是如何应对大规模图数据的管理问题,Nebula Graph 又是如何帮助网易游戏落地游戏内复杂的图的业务呢? ...

随机推荐

  1. CodeForces 715B Complete The Graph 特殊的dijkstra

    Complete The Graph 题解: 比较特殊的dij的题目. dis[x][y] 代表的是用了x条特殊边, y点的距离是多少. 然后我们通过dij更新dis数组. 然后在跑的时候,把特殊边都 ...

  2. 2014 北京区域赛 dp

    Matt has N friends. They are playing a game together. Each of Matt’s friends has a magic number. In ...

  3. 不要小看小小的 emoji 表情

    前言 好久没更新了,最近事比较多,或许下个月就会恢复到正常的发文频次. 这篇文章得从一个 emoji 表情开始,我之前开源的一个 IM 项目中有朋友提到希望可以支持 emoji 表情传输. https ...

  4. 【Redis】基础学习概览【汇总】

    一.概述 1.1 简介 1.2 Redis单线程好处 1.3 单线程弊端 1.4 Redis应用场景 二.安装.开启以及关闭 三.Redis基本数据类型 四.SpringBoot整合Redis 五.R ...

  5. 章节十六、7-DataProviders

    一.当我们的同一个test有多套数据需要进行测试,那么我们就需要用到-->DataProviders package testclasses1; import org.testng.annota ...

  6. python爬虫-模拟微博登录

    微博模拟登录 这是本次爬取的网址:https://weibo.com/ 一.请求分析 找到登录的位置,填写用户名密码进行登录操作 看看这次请求响应的数据是什么 这是响应得到的数据,保存下来 exect ...

  7. 数据库常用SQL语句(二):多表连接查询

    前面主要介绍了单表操作时的相关查询语句,接下来介绍一下多表之间的关系,这里主要是多表数据记录的查询,也就是如何在一个查询语句中显示多张表的数据,这也叫多表数据记录的连接查询. 在实现连接查询时,首先是 ...

  8. Java的8种基本数据类型的内存占用字节数和取值范围

    这是8中基本类型的内存中占用字节数(取值范围是2的(字节数X8-1)次方) 1.整型 类型 存储需求 bit数 取值范围 byte 1字节 1*8 -128-127 short 2字节 2*8 -32 ...

  9. 快速了解TCP的流量控制与拥塞控制

    有关TCP你不能不知道的三次握手和四次挥手问题,点我跳转 流量控制 1. 滑动窗口 数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失.利用滑动窗口机制可以很方便 ...

  10. TensorFlow读取数据的三种方法

    tensortlfow数据读取有三种方式 placehold feed_dict:从内存中读取数据,占位符填充数据 queue队列:从硬盘读取数据 Dataset:同时支持内存和硬盘读取数据 plac ...