引子

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 931E Game with String

    Game with String 题意:有一个字符串,可以选择从第K位开始,将[K,len(s)-1]的字符都移到前面去,现在给你一个首字母,你可以再选择一位进行观察,然后猜测这个K的值是多少, 现在 ...

  2. BALNUM - Balanced Numbers(数位dp)

    题目链接:http://www.spoj.com/problems/BALNUM/en/ 题意:问你在[A,B]的闭区间内有几个满足要求的数,要求为每个出现的奇数个数为偶数个,每个出现的偶数个数为奇数 ...

  3. net core天马行空系列: 一个接口多个实现类,利用mixin技术通过自定义服务名,实现精准属性注入

    系列目录 1.net core天马行空系列:原生DI+AOP实现spring boot注解式编程 2.net core天马行空系列: 泛型仓储和声明式事物实现最优雅的crud操作 哈哈哈哈,大家好,我 ...

  4. zabbix监控进程和端口存活脚本

    自定义脚本监控端口和进程,脚本process_port_check.sh 内容: [root@mysql02 data]# cat test.sh #!/bin/bash ############## ...

  5. NameNode数据存储

    HDFS架构图 HDFS原理 1)  三大组件 NameNode. DataNode .SecondaryNameNode 2)NameNode 存储元数据(文件名.创建时间.大小.权限.文件与blo ...

  6. String字符串关于==的详解

    String详解 字符创建方式 字符串创建有两种方式 String s = new String("myString"); String string2 = "myStr ...

  7. Dijkstra算法详细(单源最短路径算法)

    介绍 对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或 ...

  8. Python机器学习笔记:卷积神经网络最终笔记

    这已经是我的第四篇博客学习卷积神经网络了.之前的文章分别是: 1,Keras深度学习之卷积神经网络(CNN),这是开始学习Keras,了解到CNN,其实不懂的还是有点多,当然第一次笔记主要是给自己心中 ...

  9. STL中排序函数的用法(Qsort,Sort,Stable_sort,Partial_sort,List::sort)

    都知道排序很重要,也学了各式各样的排序算法,冒泡.插入.归并等等,但其实在ACM比赛中,只要不是太慢的算法,都可以适用(除非某些题目卡时间卡的很死),这个时候,速度与技巧便成了关键,而在C++的标准库 ...

  10. JAVA运行内部类的main方法

    运行内部类的main方法 定义两个线程: 一个线程的名字"thread1",线程功能输出1~10的阶乘. 另一个线程的名字"thread2",线程功能输出线程的 ...