在多数的图数据库评测中,测试环境的软件和硬件配置在很大程度上取决于待测试数据集,特别是一些硬件指标和数据集直接相关,例如小数据集只需要低配的服务器甚至纯虚拟机环境即可,而大数据集则通常对于硬件的配置要求更高。
测试数据集一般分为两种流派与风格:
- 学术风格:含社交SNS图集、WWW网络数据集、路网信息数据集、人工合成数据集等;
- 工业风格:知识图谱类、金融图谱类、交易网络类、信贷反欺诈类、自然语言处理NLP数据集、通用图谱类等。
学术流派的数据集一般而言属于简单图(Simple Graph),同构、点边无属性的范畴。这类数据集都是从上个世纪的图论、运筹学、路径规划、社会心理学、SNS社交网络、NLP研究出发演变而来的。
工业界的数据集则出现要晚得多,多半都是本世纪最近10年才开始崭露头角,一般都是多边图、异构、点边自带属性。金融行业的交易网络、知识图谱都是常见的工业级图数据集。
对比类别 | 学术派、社交网络 典型测试数据集 | 工业界 典型POC数据集 |
超小数据集 (万级) | 各类人造数据集(点 < 10,000) 多用于发表论文和证明算法 | 非常少见 |
小数据集 (百万级) | AMZ数据集(点边:~4百万) | 例如NLP数据集、中小银行的信贷数据集 |
中型数据集 (千万级) | Graph500 (点边:~7,000万) 美国路网数据集(8,000万) | Alimama (点边:1.05亿) 大型银行的信贷、风控类数据集等 |
大型数据集 (十亿级) | Twitter (点边:~15亿) GAP-Web (20亿)、GAP-Kron (22亿)、Urand(23亿) | 工商图谱(3-10亿量级)、大型银行交易数据集(3个月、10亿量级) |
超大型数据集 (>30亿) | 合成数据集,例如对Graph500进行100x的扩增… | 大型银行长期交易数据集(~100亿)、各类监管指标计量数据集(100-1,000亿) |
注:LDBC测试数据集介于上表中两类数据集之间,目前为止的测试内容偏重SNB类型测试数据和场景,即社交网络评测(Social Network Benchmarks)。随着近年来以金融行业为代表的工业界的图数据测试需求快速增长,LDBC董事会也在筹划推出金融服务行业评测标准(Financial Services Benchmarks),预计2022年内会有更详细的内容发布。
虽然我们在上表采用数据集的大小来划分测试的分级,但是图数据的测试复杂度并不与全量数据的大小成正比。这也是图系统区别于传统数据库系统最核心的地方。在前面的章节中我们对此有过解释,在这里再次重申,图系统中的每个操作的(平均)复杂度取决于:
- 图数据集的拓扑结构,例如点边比(通常用E/N来表示,其中E为全部边的数量,N为顶点的数量),是否存在自环、环路等复杂的拓扑结构,联通分量的多少等;
- 具体的被查询的数据的出入度情况,例如它的出边与入边数量、1度邻居、2度邻居、3度邻居……并依此类推;
- 只有那些对全图的数据做某种聚合统计类的操作的复杂度才与全局数据量成正比,而这类操作在图系统中属于元数据操作类型——可以说,如果仅仅是这类操作,传统数据库也可以解决。
图的拓扑结构是决定算法复杂度的最核心要素,它和全量数据大小无关,而是取决于图数据的联通性特质。有的图看似数量级很大,但是非常“稀疏”(点边比),计算复杂度低;有的图点边数量很小,但是密度很高,计算复杂度很高。还有的图的联通分量很多,每个联通分量都是一张独立的子图,网络化的查询的复杂度则直接取决于当前联通分量的拓扑结构。
有鉴于此,我们在制定评测计划的时候,并不需要盲目地或仅限于使用大数据集来测试某一款图系统的能力。下面,举两个例子:
- 很多时候,只要用中小型数据集就足以快速地实现评估。例如采用AMZ数据集中(~40万顶点,~340万边),随机访问任一顶点,查找其深度1步的全部去重邻居数据集(统计数量,并返回全部结果集),并逐级加大搜索深度到2步、3步、5步、8步、10步、15步,直至没有返回结果为0(空数据集,表示在当前出发顶点所在的联通分量中,已经遍历完全部顶点,或已找到从当前出发顶点遍历的最大深度)或无法在限定时间内返回结果,即可测试出任何一款图系统的深度遍历、穿透与下钻的能力。
- 再有,在一些全量全国工商图谱上,规模大到了10亿量级,从任何一家公司或董监高(上市公司的董事、监事和高级管理人员)节点出发查找它们的关联、控股路径,如果是完全无过滤的暴力计算,它们可能会在10层后关联数以千万计的其它实体,然而对于智能化的图系统而言,带过滤的查询才更能体现系统的能力——例如通过过滤点、边的属性和设定一些阈值来精准地查询某公司对外的投资网络、持股路径或其最终受益人。过滤的过程在图系统中就是进行动态剪枝的过程,虽然表面上看有数以千万级的关联实体,但是真正有效的“目标实体”可能只有1个、10个、1,000个,而如何高效地找到这些实体及其关联路径的能力,才是我们评测一款图系统的正确的打开方式。而不是像某些AI训练系统一样,通过无休止的暴力计算来获得看似正确,却无法解释的结果。
- 大体量的数据集适合来验证一款图系统在面向全量数据时的处理能力,但是并不能检验其深度查询的能力,例如:
- 图算法时耗、回写能力,与数据量成正比;
- 增量数据的处理能力(插入、删除等),可以检测随着数据量增大,这些操作的时耗的变化范围(恒定为最优,亚线性增长其次,线性增长则堪忧,并以此类推);
- 路径查询、K邻查询等操作则与数据量不完全相关(Dataset Size Agnostic)。
希望以上的信息能对大家有所帮助。