图数据库知识点 8:为什么你遇到的图数据库不靠谱?

开宗明义,紧扣主题。

今天我们要探讨的问题是:为什么你(我、他、大家)遇到的图数据库不靠谱?没有宣传的那么强大?

这个问题有两个层面:

  1. 预期落差
  2. 求仁得仁

关于预期落差问题 —— 你希望图数据库能“多快好省” ——具体而言就是,存无限多的数据、速度快到飞起来、东西好用,还不花多少钱。不用我再废话,你觉得这种美事儿真的有吗?

如果你满脑子想的是白嫖开源的(传统、关系型)数据库不是很多吗,诸如MySQL, PostgreSQL,不是挺强大的吗?

那我们就得聊聊数据库的发展史了。MySQL 和 PostgreSQL 是什么时候出现的?2000 年前后,感觉历史很悠久了。但是最早的关系型数据库 1970年代出就有了。Oracle (的前身)是 1972 年就成立的公司。发展了 30 年才有开源数据库一说,在那之前商业版是唯一选择。

另一方面,任何新的科技,尤其是具有颠覆性质的科技产品,它的早期一定要有足够的利润空间才有意义(新的领先的先进的技术就需要charge premium,否则谁会创新?),否则就是一个严重内卷,最后大家都挣不到钱的市场。这就是今天中国的科技行业的现状——有创新的少之又少,都在拿开源白嫖、定制开发,你猜最后谁挣到钱了?谁拥有了核心技术?

如果一个新的技术,真正有核心价值,可以创造商业价值,它的创造者早就去商业化卖钱了,而不是建设开源社区。试想一个东西,你自己都不知道怎么商业化,开源社区能帮你商业化?笑话,天大的笑话。这是违背人性的事情。特别是底层、硬核、深科技的领域,所有走开源路线的都是两种可能之一(也可能兼而有之): 1. 骗局;2. 存在巨大隐患。

好了,你会反驳说,Linux (and Linus)多厉害,有啥隐患?

呵呵,Linus 就是最大的隐患,你能想象全球最大的开源社区 Linux 的 kernel 到今天都是 Linus 本人在亲自审核,他就是是最大的瓶颈吗?如果他挂了,Linux 项目后续怎么发展,呵呵。

换个例子,MongoDB 是最成功的 NoSQL 数据库,有啥问题?

有,它到今天都是巨亏的状态。这不是隐患是什么?所谓的互联网思维,本质上就是商业骗局。

求仁得仁:这个不必多解释——多快好省根本不存在的。这就跟每天梦想天上掉馅饼一个逻辑,概率约等于天上掉小行星。作为甲方,每天想着白嫖乙方、压榨乙方、剥削乙方,没有社会担当,就这商业环境,有创新才见鬼。

下面,我们再回到问题本身:为啥你遇上的图数据库不成?

我们从产品、技术两个维度来分析。

你仔细看今天市场上的号称图数据库的产品的特点,先不论它们是否是开源的。就说它们的产品特点,举几个例子:

  • 查询语言:支持 Cypher 和 Gremlin。 就这一条,就知道这个系统是个“四不像”——这也是中国图数据库“创举”,把多种查询语言都支持了,而且好几家都宣称有这个能力。好像兼容性很强,实际上,你也可以理解为,它的底层没有任何特色可言。正因为它必然没有一个自研的底层,所以在上层它也无所谓支持什么查询语言,谁都可以。换言之,这款数据库一定性能很差。
  • 海量数据存储与实时深度下钻的“鱼与熊掌”如何兼顾:这个问题实则是个世界级难题,然而在中国“图数据库”公司面前却”轻松搞定“。我们先来回顾一下 NVidia 的老黄前几周发布的GPU+CPU超算平台,如果大家还有印象,它的级联架构在本质上是一种 HPC 超算架构。简而言之,就是通过堆叠 TB 级别的内存(是的,人家的内存比绝大多数企业的海量外存还多),以及 GPU 和 CPU 的并发(GPU 的并发基本上是 CPU 的 10x 以上,但是两者各有侧重,GPU 更加并发,但是并不能完成 CPU 所擅长的通用数学运算)。确切的说,老黄的架构本质上和 半个世纪前的小型机miniframe如出一辙!你会质疑NVidia不懂白嫖开源的大数据分布式框架?你是觉得他们没有研究过这个问题?目前所有的图数据库厂家所谓的海量分布式存储架构,都是只能存,不能算。这里说的计算是关联计算与分析!能存不能算,指的是:分布式的储存,集中式的运算。这里面有个巨大的陷阱,从存储的数据到运算之间必然存在一个数据迁移的过程,或者是数据映射的过程,和 Apache Spark 的 ETL 有些类似——也就是说,数据落盘后,想要运行某些图查询或图算法,还需要把数据迁移或映射到某个地方(可能是某台大内存的服务器),这个过程取决于数据量大小,耗时可能巨大——最搞笑的是,这种架构的问题在于,表面上数据是入了图(持久化)了,但是计算的时候又变成等同于集中式、单机处理了,而且这个过程完全做不到“即存即算”。这个问题我们可以展开讨论上三天三夜,但是现在可以总结的就是:所有的分布式存集中式算的,它的场景限制会很大——无法处理实时计算请求,只适合一些批处理场景——那么回到图数据库的意义,它不就是为了把数仓、关系型数据库的批处理加速到实时?合着还是批处理?所以,你遇上的这种架构,必然会让你失落。
  • 到底是精准计算还是采样计算?这个问题挺宽泛,在图里面,这两种模式都应该有。比如有的图算法就最初设计就是为了通过“估算、近似计算、采样计算“来让之前全量计算而不得的问题得到解决。比如计算全球的平均距离问题,这个计算复杂度一般情况下是 NP-Hard,呵呵,在大图上(比如上千万或亿的点边),你可以认为现有的硬件和软件没有办法精准计量。于是,有了 HyperANP算法,它的核心就是 ANF 算法(Approximate Neighborhood Function,即近邻域函数),它可以在任何大图上面快速的通过采样的方式估算图平均距离,非常实用。还有一些图的查询就必须是精准的,穷举式的,比如 K 邻查询,在金融、医疗、供应链等广泛的场景中,判断一个顶点的 3 度或 6 度或更深的邻居的全量数据量,必须是精准计算的。然而,你去看国内的厂家,就有一些因为无法精准计量(算力不够、数据结构有问题、架构有问题),而要采用采样计算的,试问,这种采样意义何在?完全是本末倒置的行为。

我们再来评价下技术问题,国内的图数据库厂家,数量比海外的全算起来还要多2-3 倍,据说今天已经有 40 家了,和大模型厂家相当的感觉,反正只要是新的技术趋势,对于中国公司,那都没有门槛,至少他们是这么宣称的。实际上,这些厂家就几种搭积木攒项目的方式:

  1. 拿着 Neo4j 的社区版一通封装。比如某图数据库,算了,咱就不说名字了。在这里重申一下,Neo4j 从来就不是开源图数据库,它的最核心的代码,比如图引擎,没有一行开源过!为什么叫社区版,人家的核心源代码从来就没有泄露出来——所有白嫖 Neo4j的,都没有读到过或者改动过 1 行底层代码。那么请问,你怎么好意思说颠覆了 Neo4j,你做的事情大概就是改个图标,定制个前端 CSS 吧。
  2. 拿来 JanusGraph、ArangoDB 一通魔改——前者是典型的用开源组件攒起来的架构,能存不能算的典型。后者是一种拧巴的多模数据库,这两年好像有点要销声匿迹的趋势,它在一些图查询场景中有明显的逻辑与实现错误,比如查询两点间的最短路径,它有一种加速模式(错误的实现),居然通过矩阵运算,只查出一条最短路径,这就是对 BFS(广度优先)算法的错误理解所导致的——试问,两点间如果有 1000 多条最短路径,你就查一条,你好意思吗?HD 的许大大和 BGY 的杨大大,如果俩人间有 1000 多条持股关联路径,你就让监管看到一条,你狠。
  3. 图算法,图算法是图数据库最核心的能力之一。衡量一款图数据库,就看它对图算法的支持,比如看算法丰富度、效率(速度)、资源消耗、是否可扩展,易用性如何,文档是否健全、是否热拔插等等。然而,什么也无法阻挡中国公司的”微创新“—— 对拿来主义的微创新。有个厂家,官网上面一个图算法的文档都没有,却宣称支持各种算法,就是这么任性。

好了,说了不少东西了。套用 Steve Jobs年轻的时候被问到的一句话,很经典。他被问到,是什么决定了你设计的产品的特质。想了 10 几秒钟后,他说:My taste。就是这句话,与诸君分享。你的品位,决定了你遇上什么样的图数据库。

如果你有什么不明白的问题需要垂询,最有品位的答案就在这个系列里面。

如果不在这个系列里面找到你要的答案,就在我们的脑海里。

May the best graph be with you, with love from Ultipa.

猜你喜欢

转载自blog.csdn.net/Ultipa/article/details/132278750