图数据库及其选型

什么是图数据库,如何选择图数据库

背景

在做MyClub时,产品需要根据用户的社交关系做推荐排名。针对用户的二度好友所在的房间,能提高分发的权重。

如果使用传统的关系型数据库,无法满足业务需求。考虑使用图数据库来实现用户的一度、二度好友查询。

什么是图数据库

图数据库(graph database)是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念是图,它直接将存储中的数据项,与数据节点和节点间表示关系的边的集合相关联。

图数据库是一种非关系型数据库,以解决现有关系数据库的局限性。

它和关系型数据库的主要区别包含以下几点:

  • 数据模型:关系型数据库使用表格来组织和存储数据,其中每个表格有一定数量的列和行,每行代表一个记录。而图数据库使用点边结构来存储数据,其中节点代表实体,边代表实体之间的关系。
  • 存储格式:图数据库将实体存储为节点,将关系存储为边。关系数据库将数据存储在具有行和列的表中,通过 JOIN 操作进行查询。
  • 查询语言:关系型数据库通常使用 SQL(结构化查询语言)来查询数据。而图数据库使用类似于 Cypher、Gremlin 等查询语言,能更高效地支持复杂的图形遍历和查询。
  • 索引:图数据库通常使用无索引联结,这意味着每个节点都连接到数据库中的每个其他节点,而关系数据库则使用索引指针连接相关数据。

图数据库,在描述节点直接复杂关系,如社交关系、知识图谱、推荐系统等,使用更少的存储空间和更高的查询效率,也更容易理解。

常见的图数据库有哪些

图数据库排名

在图数据库的选型上我们主要考虑了以下 5 点:(A) 项目开源,暂不考虑需付费的图数据库;(B) 分布式架构设计,具备良好的可扩展性;© 毫秒级的多跳查询延迟;(D) 支持千亿量级点边存储;(E) 具备批量从数仓导入数据的能力。
分析 DB-Engines上排名前 30 的图数据库,剔除不开源的项目,我们将剩余的图数据库分为三类:

  • 第一类:Neo4j、ArangoDB、Virtuoso、TigerGraph、RedisGraph。 此类图数据库只有单机版本开源可用,性能优秀,但不能应对分布式场景中数据的规模增长,即不满足选型要求(B)、(D)。
  • 第二类:JanusGraph、HugeGraph。 此类图数据库在现有存储系统之上新增了通用的图语义解释层,图语义层提供了图遍历的能力,但是受到存储层或者架构限制,不支持完整的计算下推,多跳遍历的性能较差,很难满足 OLTP 场景下对低延时的要求,即不满足选型要求(C)。
  • 第三类:DGraph、NebulaGraph。 此类图数据库根据图数据的特点对数据存储模型、点边分布、执行引擎进行了全新设计,对图的多跳遍历进行了深度优化,基本满足我们的选型要求。

美团图数据库平台建设及业务实践

Neo4j是最早的图数据库,从3.5版本开始,核心部分转为闭源。4.X版本后支持分布式存储,在Neo4j的应用层拼装。

NebulaGraph是新一代图数据库,开源、支持分布式。提供毫秒级查询。

图数据库实践

GO 2 STEPS from {uid} over {graph_name}

可以使用commons-pool2来做连接池管理和服用。