当前位置:首页 > 问答 > 正文

终于有人用图和故事把复杂的图数据库原理讲得通俗易懂了

(引用来源:微信公众号“码农翻身”老刘的文章《终于有人用图和故事把复杂的图数据库讲得通俗易懂了》)

想象一下,你走进一个巨大的派对,房间里挤满了人,如果你想找到“小明的同事的表妹的同学”,在一个传统的派对上(这就像传统的关系型数据库),你可能会遇到这样的麻烦:你先要找到所有小明同事的名单,然后挨个去问他们:“你好,你的表妹是谁?” 找到所有表妹后,你再拿着这份新名单去问每一个表妹:“你好,你的同学有哪些?” 这个过程非常繁琐,需要多次查询和中间步骤。

如果这个派对是一个“图数据库”派对,那情况就完全不一样了,在这个派对上,每个人不仅是一个独立的个体,更重要的是,他们之间由各种看得见的“关系线”直接连接着,小明的身上可能连着几条线,线上挂着标签“同事”,直接指向他的同事小王、小李和小张,而小王的身上又连出一条标签为“表妹”的线,直接指向小红,小红的身上呢,又连出几条“同学”的线,指向小芳、小刚等人,要找到“小明的同事的表妹的同学”,你只需要顺着这些肉眼可见的关系线,像走迷宫一样直接走过去就行了:小明 ->(同事关系)-> 小王 ->(表妹关系)-> 小红 ->(同学关系)-> 小芳,路径清晰可见,一步到位,省去了中间反复询问的麻烦。

这个例子生动地展示了图数据库的核心思想:它把数据之间的关系提升到了和数据本身同等重要的地位,在图数据库的世界里,最重要的两个概念就是“节点”和“边”。

节点,就是派对上的一个个具体的人,也可以是任何我们关心的实体,比如一家公司、一个银行账户、一部电影、一个城市,它们就像是图中的一个一个的点。

边,就是连接这些节点的线,它代表了节点之间的关系,朋友”关系、“投资”关系、“属于”关系、“出生于”关系,边是有方向的,小明借钱给小红”和“小红借钱给小明”就是两条方向相反、意义不同的边,边上还可以附带一些属性,借钱”这条边上可以注明借款金额和日期。

这种用节点和边来组织数据的方式,非常符合我们人类大脑思考现实世界的方式,我们的世界本身就是一个由各种实体和复杂关系编织成的大网,想想社交网络:你是如何认识新朋友的?很可能通过“朋友的朋友”,想想追查诈骗案:调查员需要追踪资金从一个账户到另一个账户的完整流转路径,想想推荐系统:因为你喜欢A电影,而喜欢A电影的人也大多喜欢B电影,所以系统把B电影推荐给你,这些场景的核心都是在处理复杂、深层的关系。

这正是图数据库最擅长的地方:处理关系查询,对于传统数据库来说非常吃力、甚至无法完成的“多层关系查询”(比如查询“朋友的朋友的朋友”),在图数据库里却是它的看家本领,因为它本质上就是沿着关系网络进行“图遍历”,就像在社交网络上点击一个又一个的链接,速度极快,而且查询的深度越深,其效率优势相比传统数据库就越明显。

文章中还举了一个非常有趣的例子来解释图数据库的查询语言Cypher是怎么工作的,它就像是在用英语描述如何在图中“画”出你想要找的路径,要查询“名叫Tom的人喜欢的电影”,用Cypher写出来大概是这样的感觉:“匹配(Tom这个人)-[:喜欢]->(某部电影),然后返回这些电影。” 这种语法非常直观,几乎就是在用白话描述我们想要寻找的关系路径。

图数据库不是一个神秘莫测的高科技玩意,它其实就是用一种更自然、更直白的方式——画图讲故事的方式——来管理和查询数据,尤其是当你的数据充满了错综复杂的联系时,它把数据从死板的表格中解放出来,让它们变成一张活生生的关系网,而我们则可以在这张网上轻松地沿着关系线进行探索,发现那些隐藏在深层关系中的价值和秘密,当你的业务问题核心是“关系”时,比如社交网络分析、金融反欺诈、知识图谱、推荐引擎等,图数据库往往能提供令人惊喜的解决方案。 完)

终于有人用图和故事把复杂的图数据库原理讲得通俗易懂了