Skip to main content

图数据库

图形数据库(Neo4j)

图形:图形数据库旨在轻松构建和运行与高度连接的数据集一起使用的应用程序。图形数据库的典型使用案例包括社交网络、推荐引擎、欺诈检测和知识图形。热门图形数据库包括 Neo4j 和 Giraph。图形数据库专门用于存储和导航关系。关系是图形数据库中的一等公民,图形数据库的大部分价值都源自于这些关系。图形数据库使用节点来存储数据实体,并使用边缘来存储实体之间的关系。边缘始终有一个开始节点、结束节点、类型和方向,并且边缘可以描述父子关系、操作、所有权等。一个节点可以拥有的关系的数量和类型没有限制。

图形数据库中的图形可依据具体的边缘类型进行遍历,或者也可对整个图形进行遍历。在图形数据库中,遍历联结或关系非常快,因为节点之间的关系不是在查询时计算的,而是留存在数据库中。在社交网络、推荐引擎和欺诈检测等使用案例中,您需要在数据之间创建关系并快速查询这些关系,此时,图形数据库更具优势。

图数据库如何表达数据?或者其建模方式

图数据库使用图模型来操作数据。目前使用的图模型有 3 种,分别是属性图(Property Graph)、资源描述框架(RDF)三元组和超图(HyperGraph)。现在较为知名的图数据库主要是基于属性图,更确切得说是带标签的属性图(Labeled-Property Graph),当然标签不是必须的。

属性图由顶点(圆圈)、边(箭头)、属性(key:value)和标签组成,顶点和边可以有标签,比如顶点的标签是 User,边的标签是 FOLLOWS。图中标签为 User 的顶点有 name 属性,属性值为 Johan 或 Peter 或 Emil。边表示了他们的关注关系。图中标签为 FOLLOWS 的边是单向边,如果是相互关注了,那么需要 2 条边表示。

为什么需要图数据库,相比关系型数据库等有什么优势?

因为关系型数据库不擅长处理数据之间的关系。我们举最经典的社交网络中查询的性能作为对比。

一个社交网络,图中包括了朋友、同事、夫妻和恋人等多种关系。有人曾做过一个测试:在一个包含 100w 人,每人约有 50 个朋友的社交网络中找到最大深度为 5 的朋友的朋友。

测试结果如下:

深度为 2 时(即朋友的朋友),两种数据库性能相差不是很明显;

深度为 3 时,很明显,关系型数据库的响应时间 30s,已经变得不可接受了;

深度到 4 时,关系数据库需要近半个小时才能返回结果,已经妄称在线数据处理系统了;

深度到 5 时,关系型数据库已经掉入深渊。而对于图数据库 Neo4J,深度从 3 到 5,其响应时间均在 3 秒以内。

可以看出,对于图数据库来说,数据量越大,越复杂的关联查询,约有利于体现其优势。从深度为 4/5 的查询结果我们可以看出,图数据库返回了整个社交网络一半以上的人数。

除了性能好,图数据库还有其他优势吗?

除了很显而易见的性能优势外,灵活性和敏捷性也是图数据库相比关系型数据库的重要优势。图天生就是灵活可扩展的,可以对已存在的图结构增加新的边、节点、标签和子图,但却不会破坏现有的查询和应用程序的功能。这就使我们无需在项目之初,对数据的真实模样和复杂度缺乏了解的情况下被迫设计成最终而完整的数据模型,往往这样的模型并不是最终和完整的。

另一方面,有些业务本身就是灵活多变的,或者说敏捷的。使用图数据库(或其他 NoSQL 数据库,比如 MongoDB)可以快速跟上业务的变化而不需要进行 Schema 变更等代价不菲的管理操作。

图数据库怎么使用,用 SQL 做增删改查吗?

图数据库不使用最传统的 SQL 作为 CRUD 语言,原因是 SQL 作为关系型数据库的查询语言,其也不擅长表达 Join 等关系查询和操作,在需要做多层的关系 Join 查询时,SQL 往往冗长而难以直观得理解。这是为什么不采用大家最为熟知的 SQL 却要引入新的图查询语言的主要原因。举个对比的例子:

在英文中“I love my younger sister as well as my grandmother on my father’s side”,与中文的“我爱我的妹妹和奶奶” 是一样的意思,但是在简洁程度上中文远远好于英文。(6 个词,9 个字) vs (14 个词, 70 个字)

也就是说,在图数据库中使用专门的图查询语言比使用 SQL 更加高效。目前主流的图查询语言是 Cypher 和 Gremlin。

目前有哪些比较知名的图数据库?

Neo4J 最主流的图数据库,相比其他数据库更加成熟,Neo4J 使用 Java 开发,支持 ACID,最新版本是 3.3.5。每个版本均有社区版和企业版,其中社区版是免费版,基于 GPLv3 协议开源,但局限于单机部署,功能受限。企业版包括了 Neo4J 所有功能,包括主从复制用于高可用和读写分离,可视化管理工具等,但增加了商业协议,需付费使用。Neo4J 不是分布式数据库,扩展性不是其优势。但它是一种原生的图数据库,同时也具备了图分析引擎的能力。应该说 Neo4J 是目前使用最为广泛的图数据库,大量介绍图数据库的书籍都是以 Neo4J 为基础来介绍的。

Neo4J 使用 Cypher 作为图数据库查询语言,由于 Neo4J 的成功,Cypher 目前被大多数图数据库所支持。Cypher 语言例子如下(找出所有 Johan 所关注的人所关注的人,该人也是 Johan 关注的人):

MATCH (a:Person {name:'Johan'})-[:FOLLOWS]->(b)-[:FOLLOWS]->(c),        (a)-[:FOLLOWS]->(c)  RETURN b, c

原生图数据库,这是什么意思?

原生图处理指的是利用了免索引邻接的图数据库。免索引邻接是指通过边关联的 2 个节点,其彼此指向是物理的,也就是通过边访问一个节点时,该边保存的就是目标节点在磁盘上的物理地址,这样就需要通过索引去找到目标节点,如果边很多的时候,对性能提升很有帮助。

一、社交网络应用

社交是人与人之间的连接,以图数据模型为内在的图数据库天生适用于明显的以联系为中心的领域。在社交网络中使用图数据库可以方便得识别人/群组和他们交流的事物之间的直接或间接的联系,使用户能够高效地对其他人或事物进行打分、评论、发现彼此存在的关系和共同关系的事情。可以更加直观得了解社交网络中人与人之间如何互动、如何关联、如何以群组的形式来做事情或选择。

社交网络是最基础的图模型,在此基础上可以叠加更多的内容,比如个人的喜好、购买过的物品、日常的生活方式等,从而演化出更高级的图数据库应用模式,比如实时推荐系统。

二、实时推荐

在零售、招聘、情绪分析、搜索和知识管理领域,社交网络和推荐引擎可以提供关键的差异化能力,有很多种办法可以实现推荐,但使用图数据库在实时性和效率上有其特有的优势。推荐算法在人和事物之间建立联系,而联系建立的基础是用户的行为,比如购买、生产、消费、打分或评论有关资源等行为。推荐引擎可以识别出某些资源会吸引特定个人或群体,或者某些个人或群体可能对特定资源感兴趣。

一个有效的推荐依赖于对事物之间关联的理解,同时也依赖于这些关联的质量和强度,而属性图是所有这些关系密切、关联紧密的数据结构的最佳表达方式。用图数据库存储和查询这些数据使得应用程序可以为最终用户呈现实时结果,反映数据最新的变化,而不是返回给用户那些预计算的状态结果。

三、地理空间管理

地理空间类的应用程序包括公路网、铁路网等,地理空间操作依赖于特定的数据结构,简单的加权带方向的联系,复杂到空间索引如 R 树。和索引一样,这些数据结构天生就以图的形式呈现,尤其是层级结构,非常适合图数据库。

总的来说,通信、物流、旅游已经路由计算相关领域的地理空间应用经常会使用图数据库。

四、主数据管理(Master Data Managerment)

在企业或组织中,主数据管理(MDM)包括的数据涉及用户、客户、产品、供应商、部门、区域、站点、成本中心和业务单元等。这些数据来源可能是多种多样的,MDM 用来识别、清洗、存储和管理这些数据。其关键问题包括谁组织结构的变化、企业合并和业务规则的变化来管理这些变化;融合新的数据源,用外部源数据补充已有的数据;解决报告需求、鉴定需求和商业智能客户的需求;当数据的值和模式变化时对数据进行版本管理。图数据库的数据模型高效匹配 MDM 的快速演变和不断变化的业务需求。

五、网络和数据中心管理

图数据库已经成功地使用在了电信、网络管理和分析、云平台管理、数据中心和 IT 资产管理以及网络影响分析等领域。在这些领域里,他们将影响分析和问题解决的时间时间从数天数小时减少到了分钟级甚至秒级。面对不断变化的网络模式,图数据库的性能和灵活性都是它适合这些领域应用的重要因素。

六、授权和访问控制

图数据库可以存储那些复杂的、高度关联的、跨越数十亿参与者和资源的访问控制结构。尤其适用于内容管理、联合授权服务、社交网络偏好已经软件服务化提供。将这些系统从关系型数据库切换到图数据库后,性能从分钟级提升到毫秒级。

上面仅列举了部分例子,除此之外,图数据库产品还广泛用在金融和保险行业反欺诈、风控,电商和社交类产品防机器人作弊等领域。