数据结构论坛

首页 » 分类 » 分类 » 从扩线查询能力分析分布式图数据库Tita
TUhjnbcbe - 2025/7/27 15:45:00

本文先简单介绍了图数据库的发展趋势,而后重点介绍了分布式图数据库Titan,围绕图数据库的典型查询(扩线查询)场景,分析了Titan在设计上的一些待改进点。

从DB-Engines统计信息来看图数据库发展趋势

从DB-Engines的数据库趋势信息来看,从13年至今,GraphDBMS是增长最快速的一类数据库。而下图给出了知名图数据库的数量以及在DB-Engines所收录的种数据库中所占的比重:

尽管从实际的应用现状来看,图数据库依然还是一个相对小众的数据库,但从DB-Engines的趋势信息反映了图数据库未来的巨大发展潜力。

图数据库定义

百度百科对图数据库的定义:

图数据库是NoSQL数据库的一种,它应用图理论存储实体之间的关系信息。最常见例子就是社会网络中人与人之间的关系。关系型数据库用于存储“关系型”数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。

如下内容翻译自维基百科:

图数据库以图论为基础,并以节点(顶点)、边和属性作为基本概念。节点表示实体,如人、企业、账户或任何其他要表示的事物,大致相当于关系数据库中的记录、关系或行,或文档数据库中的文档。边,也称为关系,是连接节点之间的线,表示它们之间的关系。边是图数据库中的关键概念,代表了在其他系统中不能直接实现的关系的抽象。属性是节点(和边)的重要关联信息。例如,“维基百科”是一个节点,它的关联信息可以是“网站”,或者“参考文献”,或者是一个以“w”开头的字母,这些信息都可以是这个节点的属性。

图其实是一种表达能力非常强的模型,如用来描述社交关系网络,用户与产品的推荐关系,通信网络,交通网络等等,这类数据的特点是各种实体间的关系错综复杂,而实体自身还有属性描述信息,而如果使用传统的RDBMS来存储这类数据,将使得RDBMS变得”沉重不堪”。这类数据其实广泛存在于现实世界中,尤其是伴随着不断发展的人工智能技术,越来越多的复杂关系型\向量型数据被挖掘出来,图数据库将会成为一种基础的数据库技术。在区块链领域,作为BlockChain3.0的典型代表技术IOTA,它的核心技术其实已经是图技术。

图数据库与关系型数据库

数十年来,开发者习惯了使用关系型数据库处理关联的、半结构化的数据集。关系型数据库设计之初是为了处理纸质表格以及表格化结构,它们试图对这种实际中的特殊联系进行建模。然而关系型数据库在处理“复杂关系”数据时却显得力不从心。

让我们通过社交网络领域中一些简单的查询来理解关系型数据库中关系查询的代价。下面是专门介绍Neo4j技术的《GraphDatabases》一书中提供的一个非常经典的例子:

下图展示了一个记录朋友关系的简单的连接表设计:

Person与PersonFriend表

当回答“whoareBob’sfriends?”这个问题时很简单。SQL语句如下:

whoareBob’sfriends?

基于这个示例数据,答案是Alice和Zach。这不是一个代价高昂或困难的查询,因为它使用了WHERE语句”WHEREp2.Person=‘Bob’”,使得返回的行数是可预期的和受限的。

但如果要回答“whoisfriendswithBob?”,SQL语句则变为:

whoisfriendswithBob?

这个查询的答案是Alice。这个反向查询在实现上也很简单,但是数据库端的花销就略微大些了,因为所有的数据行都在PersonFriend中。我们可以加入索引,然后仍会涉及代价高昂的间接层。

当问题是“谁是Alice的朋友的朋友?”时查询就更复杂了:

谁是Alice的朋友的朋友?

当然基于RDBMS可以做到,而且这个查询还是可能在合理的时间内得到答案的。当查询延伸到第4层、第5层的朋友关系时,由于递归的JOIN查询使得此时的时间空间复杂度变得非常高,从而使查询的效率急剧恶化。

但利用图数据库,我们可以通过如下模型来描述上面的Person与PersonFriend两个表中的数据:

PersonandPersonFriendInNeo4j

在图数据库中,类似于”Bob的朋友”以及”Bob的朋友的朋友“这类查询,我们称之为“扩线查询”。如果需要查询”Bob的朋友的朋友”,只需要从Bob这个节点出发,进行2层扩线查询。不仅在数据模型的表达上更加直观,查询效率也会有质的提升。当2层扩线查询中,如果结果集小于10万级别,Neo4j可以达到ms级别响应。

关于Titan

Titan有如下关键设计:

支持大规模图数据存储,Titan图数据库是建立在分布式集群上,数据存储容量和集群节点数量成正比支持弹性和线性扩展,高可用,高容错支持Gremlin图查询语言支持利用Hadoop计算框架对图数据进行分析支持外部索引:Elasticsearch、Solr、Lucene支持ACID和最终一致性支持多储存引擎:Cassandra、HBase、BerkeleyDB和Immemory模式基于ApacheLicense2.0正是基于这些设计,Titan在年和年期间积累了一批用户,因为当时并没有多少开源图数据库可选。Titan项目原由Aurelius开发,但后来该公司被DataStax收购,Titan原来的开发团队转向闭源图数据库产品的研发,因此,导致Titan项目停更。后来,由IBM领头,在Linux社区开启了JanusGraph项目(该项目直接从Titan项目Fork而来)来试图让停更的Titan复活。但从JanusGraph代码的

1
查看完整版本: 从扩线查询能力分析分布式图数据库Tita