修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

申请证书

证书详情

Please complete this required field.

  • Ultipa Graph V4

Standalone

Please complete this required field.

Please complete this required field.

服务器的MAC地址

Please complete this required field.

Please complete this required field.

取消
申请
ID
产品
状态
核数
申请天数
审批时间
过期时间
MAC地址
申请理由
审核信息
关闭
基础信息
  • 用户昵称:
  • 手机号:
  • 公司名称:
  • 公司邮箱:
  • 地区:
  • 语言:
修改密码
申请证书

当前未申请证书.

申请证书
Certificate Issued at Valid until Serial No. File
Serial No. Valid until File

Not having one? Apply now! >>>

ProductName CreateTime ID Price File
ProductName CreateTime ID Price File

No Invoice

老边谈图 | 7、如何正确评测图数据库? - 嬴图
2023-05-30
老边谈图 | 7、如何正确评测图数据库? - 嬴图

大家好,见字如面。我是教授老边。本专栏将基于我个人的观察,为大家带来关于图数据库技术的分享。从基础概念出发,深入剖析算法逻辑,分享实际应用案例,探讨市场现状,展望未来趋势,希望能为大家带来图相关知识,引发思考与启发。让我们一同踏上这场图数据库技术的探索之旅 。


开门见山,标题里已经说了,有正确的评测方式,就有错误的评测方式。

来点儿细节,以小见大,篇幅所限,先讲几个点:

·只存不算的测试内容

·追求全行一张图的测试思路

·不求甚解的测试内容

以上三点,笔者稍微逐一展开。

 第 1 点:只存不算  

在之前的文章【图数据库只存不算?】中,我们已经touch-base了图数据库绝不能只存不算,否则,Hadoop 也能干你要干的存储的事儿。这是个关键的知识点:存(海量)数据这件事情,Hadoop的 HDFS(以及 inspire 它的GFS)早在20 年前就已经实现了。用分布式的多机、多节点的 IO 来并发写入,写入速度(吞吐率)可以接近硬件的极限,比如 SSD 上面~500MB/s的水平,1个小时可以写入 1.8TB,2 个小时 3TB。很快,对不对?!?

然而,这么快写入的数据,你可以拿它做什么?像很多数仓、数湖一样,一入湖仓即沉底,沉底就沉底?在这个上面你可以跑任何图查询的场景吗?显然不会。那么,测试存入这个海量数据的意义何在?证明一款图数据库是否有湖仓的潜力?这个逻辑说不通。

这就是目前有些 POC 测试中真实发生的荒诞场景,先测你能不能存它几个 TB 的数据、多快能存进去,然后转头没有任何后续的图查询、分析、计算的场景?这是什么操作?

有这类 POC 测试方案的,毫无疑问都是被至少存储层是基于 Hadoop 的 HDFS 逻辑构建的所谓的图厂家忽悠的。

分布式最大的优点在于能快速写入,但是其最大的不堪就是存入之后其无法快速进行关联计算与分析。因为写入的内容根本就和图分析无关,所谓非原生数据。想要计算,还需要再次数据迁移或者映射,这个速度会极慢,因此,这个“只存不算”的场景,是一种典型的误导!

 

 第 2 点:一张大图  

全局一张图、全行一张图,这个提法乍一听很猛,颇有点当年某G-SIB 提出的全行一张表的概念,当然一张表,得有多大、多宽、多长.…… 天知道。

无论以上哪种提法,都禁不起推敲。即便是在逻辑上,全行一张图的概念也是不准确的。除非我们忽略一切业务的特性、数据的特性、数据之间关联的特性等,或者是,在技术手段上无法支持多图的表达方式。

举几个例子:

·反欺诈场景中的构图就不止一种模式,比如单边图(简单图)多边图(复杂图)就是截然不同的两大类构图方式,何来一张图可以包罗万象呢?

· 工商图谱和交易流水的图谱,在图结构上差异很大,尽管可以融合(通过 schema 来进行过滤区分),但是从业务逻辑上,并没有必要强行融合,为追求一张图而一张图。在物理与逻辑层面,区分开来反而更清晰简洁。

·业务部门之间的数据如果要物理隔离,每个部门一套自己的图数据、图系统显然更为合理——即便是在总行的最高视角,也没有必要去追求一张大图。

提出概念不难,但科技成果的落地,一定要视实际情况而定,审慎而为的,否则最终非常有可能烂尾。从 PMF(Product Market Fit)的角度,销售团队鼓吹的这个概念,均要由客户与 IT 来买单和承受后果的。别的不说,大图的查询性能,配合上只存不算的诡异组合,妥妥在抹黑图数据库——提出这类观点的人、团队或厂家,要么是没有做底层技术的基因,要么就是不懂——当然,没有基因也是不懂的意思。

 

第 3 点:不求甚解、漏洞百出 

举几个例子,比如 K邻、K跳的测试方式:

到底是要第K 跳的结果还是从第1 到第 K 跳混在一起的结果?

你说哪种计算的复杂度更高(更准确)呢?

如果把第 1 到第 K 都混在一起,那么测试结果错误的概率很高,并且底层实现的代码逻辑很大概率也是错误的!

能直接返回某一跳结果的,当然可以返回第1—第 K 跳的聚合结果,但是反之并不成立。(用滥竽充数形容,最恰当不过!)

这里有一些技术细节:

1、实现方式是否严格按照广度优先遍历(BFS)实现?

2、是否进行全量计算(而非采样)?

3、是否进行了去重计算:里面还有两个细节,是否进行了逐层(跳)的去重;是否进行了跨层的去重?

这三个点,才是进行 K 邻查询时的关键!

如,到底是计算全量数据,还是采样计算?有的厂家竟然在 K 邻查询的时候,居然还有“阈值限定”这种骚操作。我们来剖析一下为什么要限定结果,因为:其系统无法全局遍历和计算,所以只能采样出结果。

首先,这个结果必错无疑,那么,为什么它要采样呢?还是要举个例子,尽管会让人尴尬..……

采样,是因为算力不够,为啥不够?很多原因,比如数据结构遍历起来太慢,来不及触达全量邻居;再如,分布式,邻居们早就被拆分的哪哪都是,只能随机采样,敷衍了事,否则 BSP (Bulky Synchronous Processing)系统的网络通信就会让这种分布式系统直接跪了(宕机)。还有,超级节点的存在,也让采样图数据库们很难受,某个顶点有 100万邻居的时候,即便是单机去计算其 2 度(跳)邻居也会非常有挑战。对于那些不清楚算法复杂度和高并发计算为何物的工程师而言——就这个地方能 1 秒钟完成K 邻计算,也算是基础扎实了——参考下图 1 秒可以完成 2-hop,意味着已经超越 Neo4j 了。真实的情况是,Neo4j 依然大幅快于、优于那些国产“皇帝数据库”们。

事实的真相在于,在这种深度查询条件下,水平分布式会更慢,不是慢 1—2 倍,是 10倍或更多,查询越深,慢的越多,1 层慢 10 倍,2 层慢 100 倍,3 层慢 1000 倍,以此类推。

图:15 亿点+边数据集,大量超级节点,平均查询耗时

分布式也有优点,存得快,多几台机器,存得效率可以指数级上去,存入快 10 倍,甚至几十倍。然而,存得再快,还是算不动。抓不住矛盾的主要方面,就会选型上不靠谱的图系统!

关于图数据建模,这也是图数据库、图谱行业乱象丛生的一个高发地。这个知识点或许应该单独成文。

有几个观点简单分享:

1、建模方式应该多种多样,不会只有 1 种!

2、不同的建模方式,效率会有差异!计算难度也不同。

3、要根据具体的业务场景来灵活应对。

而不能支持多种建模方式的图系统,其局限性,可想而知。

比如,某知名图厂商,早年间从学术界出发,只知道两个顶点间只能有 1 条同类型的边。后来到了金融领域才发现,原来两个账户间可以有多条转账的关系…… 之前他们的做法是要把转账行为也作为顶点,无形中增加了很多无用的边——这种构图模式,应付反欺诈场景是可以的,但是其它更多的场景,无论是计算还是存储效率都不是最优的。后来,该厂商hack 了其底层,来支持多边图模式,但是底层积重难返,据说只能支持限定数据量的边。

图:单边图 vs. 多边图

另一个更知名的厂商,是的,图数据库爱好者们可能多少都用过它家的社区版。为了支持 K 邻计算的加速,用了双向链表的数据结构,于是当出现超级节点的时候,哦,我的意思不是说 100 万邻居,而是 仅仅30 — 50 个邻居的那种,就可能会出现卡死的情况。

这两个例子说明什么问题呢?想改造底层,难度比上层应用改造大100 倍?说到底,和团队基因有关。如果做应用层的想下去做硬科技,其实是非常困难的,最终10个里面 9.5+个会悬羊卖狗。反之则不然。还有就是让二把刀们来改造底层数据结构,一定要多去雍和宫、潭柘寺、灵隐寺、南海观音、San Jose Pao-hua佛寺之类的地方多拜拜…… 奇迹兴许会出现。

文/教授老边
HPC高性能计算与存储专家、大数据专家、数据库专家及学者