图数据库基准测试 LDBC SNB 系列讲解:Schema 和数据生成的机制

LDBC(Linked Data Benchmark Council)Social Network Benchmark,简称 LDBC SNB,是一种针对社交网络场景的评估图数据库性能的基准测试。

LDBC 简介

除了 Social Network Benchmark,LDBC 旗下目前还有其他几种基准测试:Graphalytics Benchmark,Financial Benchmark 和 Semantic Publish Benchmark,分别针对图分析、金融和 RDF 的场景。Social Network Benchmark 是 LDBC 最早的提出的基准测试,已经成为国内外最主流的图数据库基准测试,在国内很多图数据库招标也会将 LDBC SNB 作为性能测试的一项。但需要说明的是,LDBC 本身作为一个非盈利组织,只提供官方审计。不同图数据库可能受到运行环境以及基准测试的相关参数影响,因此测试结果的横向对比没有任何意义

LDBC SNB 主要包括三个主要部分:

  1. Data Generator:这是一个数据生成工具,用于生成具有社交网络特性的大规模复杂数据。这些数据包括人、帖子、评论、地理位置、组织和其他一些社交网络的典型实体和关系。
  2. Interactive Workload:主要针对 OLTP,模拟了用户在社交网络上的日常活动,例如发布帖子、添加好友、点赞等。读请求以查询以一到两跳为主,同时可能会伴随一些写请求。
  3. Business Intelligence Workload:主要针对 OLAP,模拟了对社交网络数据进行深入分析,以全图查询为主。例如分析用户的社交行为、社区的形成和演变,以及其他一些需要复杂分析和大量数据处理的任务。

LDBC SNB 的论文里还提到了一个 SNB Algorithms,顾名思义主要是跑图算法的,如 PageRank、社区发现、广度搜索等。但论文是 2015 年发表的,当时描述这个场景还在起草中,目前已经将这部分移到了 Graphalytics Benchmark。

此外,想要运行 LDBC SNB 测试,还需要一个官方提供的 Driver。不同的数据库需要基于 Driver 的接口实现相应的 Connector,用来连接 Driver 和数据库。之后 Driver 会根据 Benchmark 的相关参数生成 Workload(这里可以理解为一系列的查询语句),并驱动待测数据库执行这些查询语句,最终得到性能测试结果。

整个 LDBC SNB 基准测试的流程如下,主要分成准备阶段基准测试结果输出这三个阶段。

准备阶段主要执行数据生成,包括初次导入的全量数据,以及后续实时更新的数据。此外在官方审计中,还需要在 SF10 Dataset 上进行 Validation,因此这一阶段也会生成用于校验的数据。

基准测试阶段会先在 SF10 Dataset(在本文文末介绍了何为 SF)上进行 Validation,之后会在 SF30 或者 SF100 Dataset 进行性能测试。Validation 的过程就是在数据导入之后,由 Driver 根据之前准备阶段的一系列 query 和期望结果,对数据库的查询结果进行校验,以确保数据库的查询结果正确。Validation 的这个过程没有时间要求。而之后的性能测试分为导入、预热、性能测试,数据库可以有 30 分钟的预热时间,而在性能测试至少要持续两个小时,最终将测试结果汇总并输出。

figure

由于篇幅限制,我们这一系列重点介绍 SNB Interactive Workload 相关内容。这一篇,我们主要会结合论文,介绍 SNB 的 Schema 以及数据生成,也就是准备阶段。

LDBC SNB Schema 生成

为了和 SNB 中的数据命名统一,本文相关名称我会用英文,所以读起来可能会有些怪怪的。为了降低理解成本,每个英文单词首次出现后面会跟随对应的中文注释讲解。

SNB 的数据主要是模拟了一个类似 Facebook 的社交网络。其中数据都是围绕 Person(人)构建而来,Person 之间会构成 Friendship(情谊)网络。每个 Person 可能会有若干 Forum(特定讨论区),Person 可以在 Forum 中下面发送若干 Post(帖子),其他 Person 可能会 likes(点赞)其中一些 Message(消息)。

以上这些元素的数据量主要会受 Person 和时间的影响:

  • 有更多朋友的人会发送更多的评论或点赞
  • 时间越长,会结交更多的朋友,评论或点赞数量也会上升

还有一部分数据不会随 Person 数量而变化,主要包括一些 Organization(组织,这里主要是学校)以及 Place(地方,这里主要是居住城市、国家等地理信息)。这部分数据会在数据生成时起一些作用,比如在同一时期在同一个学校上学的人更有可能称为朋友。

SNB 的完整 Schema 如下图所示:

figure

大多数图数据库在进行测试时候,会将实体建模为点,而不同关系会建模为边。但这只是一个惯例,SNB 的数据建模和实际数据库中的 Schema 可以不同,只要数据库能够完成相应 Workload 的查询即可

LDBC SNB 数据生成

SNB 的一个重要部分是 Data Generator(下文称为 DataGen),用来生成满足上面 Schema 的数据。Generator 生成的数据由以下三个参数决定:

  1. Person 的个数
  2. 模拟多少年的数据
  3. 从哪一年开始模拟

根据官方文档,DataGen 生成的数据有以下性质:

  • 现实性:生成数据模拟了一个真实的社交网络。一方面,生成数据中的属性、基数、数据相关性和分布经过精心设置,从而能够模拟 Facebook 等真实社交网络。另一方面,其原始数据来自于 DBpedia,保证数据中的属性值真实且相关。
  • 可扩展性:针对不同规模和预算的系统,DataGen 能够生成不同大小的数据集(GB 到 TB 级),此外 DataGen 可以在单机,或者是一个集群中完成数据生成。
  • 确定性:无论用来生成数据的机器数量多少、机器配置是高还是低,DataGen 生成的数据都是确定且相同的。这一重要功能确保了任意一个数据系统都能使用相同的数据集,保证不同系统环境之间的测评比较公平且基准测试结果可重复。
  • 易用性:DataGen 被设计得尽可能易于使用。

整个数据生成的流程图如下所示,我们会分解为几部分介绍:

figure

生成属性分布

第一步是初始化。DataGen 使用的原始数据来自于 DBpedia,针对每一个属性,DataGen 会根据以下方面决定属性的分布:

  • 有多少种可能的属性值
  • 每一种属性值出现的概率

最终将属性的分布情况作为资源文件以及 DataGen 的参数保存下来。

生成 Person 和 Friendship

前面也提到过,SNB 的 Schema 的核心是 Person,这也体现在数据生成过程中。接下来 DataGen 就会生成所有 Person,以及 Person 中一部分后续操作所需要的信息,比如每个 Person 有多少 Friendship(这个值非常重要,其分布满足 Power law(幂定律)),Person 所就读的大学,Person 所就职的公司等。

接下来,DataGen 会创建每个 PersonFriendship 关系(即流程图中的 knows)。和真实社交网络一样,有相同兴趣或者行为的人,很有可能会连接在一起。为了模拟这样的社交网络,SNB 在生成 Friendship 时会考虑以下三个维度:

  1. Person 所就读的大学,就读时间,以及大学所在城市
  2. Person 的兴趣
  3. 每个 Person 会生成一个随机值,随机值越相近代表其越类似(这是为了模拟不是所有朋友都是通过大学和兴趣结交的)

三个维度分别占每个 PersonFriendship关系权重的 45%,45% 和 10%,也就将 Person 之间建边的过程分成了三个子步骤。

DataGen 会依次根据三个维度将所有 Person 进行排序(每次只按一个维度进行排序),然后将排序过后的 Person 切分为不相交的多个部分,分发给不同 Worker 进程。即便是切分之后,每个 Worker 线程负责的 Person 可能也可能超过内存大小。因此,Worker 线程会维护一个滑动窗口,滑动窗口内的 Person 之间建立 Friendship 关系的概率满足几何分布。

如下图所示:

figure

假设现在根据就读大学这个维度进行了排序,得到了一个 Person 有序序列。之后 Worker 就会维护一个滑动窗口,每次为滑动窗口最左侧的人生成 Friendship 关系(上图当前是 P2),滑动窗口内的其他人和窗口第一个人建立 Friendship 的比例满足几何分布。

直到滑动窗口的第一个人建立了足够多的 Friendship 之后,滑动窗口的起点会移到下一个人。

这里没有深究滑动窗口的大小、几何分布的参数甚至是随机生成器的参数,不知道在出现滑动窗口内无法生成足够多 Friendship 关系时,DataGen 如何处理。

将三个维度都经过排序、分发、按滑动窗口建边之后,DataGen 就进入了下一阶段。

生成社交活动

生成完 PersonFriendship 之后,DataGen 就开始生成每个 Person 的社交活动,包括 ForumPostComment。这部分数据也有一些相关性存在:

  1. 有越多 FriendshipPerson 在社交网络上会越活跃
  2. 每个 Person 更可能在自己感兴趣或者就读大学相关的 Forum 进行 Post 或者 Comment
  3. 社交活动和时间是有相关性的,比如接近世界杯,足球相关的讨论就会激增

最终输出

经过以上步骤之后,DataGen 完成了数据生成,模拟的社交网络图会分成两部分进行输出:

  • Dataset:90% 的数据用于初始导入
  • Update Streams:10% 的数据用于后续实时更新

除此之外,还会生成后续 Workload 中请求的参数(主要是起点)。关于参数生成我们会在下一篇详细解释,这里简单描述一下 SNB 的读请求 Workload。Interactive Workload 主要的查询希望在一秒以内得到查询结果,所有读 query 都是从图中的一个点出发,获取很小一部分的子图信息。另外,因不同起点的出入度不同,基本上也就决定了这次读请求会访问的数据量。

为了测试不同系统和场景,SNB 定义了比例因子(Scale Factor,即所谓的 SF)用来控制最终生成的数据量大小。比如,SF1 原始数据大小为 1 GB,同理 SF0.1 和 SF300 的大小为 100 MB 和 300 GB。不同比例因子的各个类型的点边数据量如下表所示:

figure

最终生成的 Dataset 分为两大类:Static 和 Dynamic,格式都是 CSV。根据 DataGen 配置的线程数量大小,最终生成的数据也会分为多个分片。Static 包含 OrganizationPlaceTag 等,都是基于 DBpedia 生成的静态数据,其数量不会随着比例因子变化而变化。换而言之,这部分数据与 Person 的个数无关。而 Dynamic 部分主要包括 Personknows(即前面数据生成部分描述的 Friendship)、ForumPostComment 等。

而 Update Streams 中包含了所有更新的操作,主要就是模拟实时注册新用户、评论、点赞、加好友等等行为。

Reference

到这里准备阶段大概就介绍完了,在准备阶段最终生成的请求参数部分我们会在下一篇讲述Workload时再展开。

  • ldbc-snb-interactive-sigmod-2015.pdf (ldbcouncil.org)
  • The LDBC Social Network Benchmark Specification

关于 NebulaGraph
NebulaGraph 是一款开源的分布式图数据库,自 2019 年开源以来,先后被美团、京东、360 数科、快手、众安金融等多家企业采用,应用在智能推荐、金融风控、数据治理、知识图谱等等应用场景。GitHub 地址:https://github.com/vesoft-inc/nebula

作者:critical27

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iTOP-3588开发板快速启动手册Windows安装串口终端软件创建串口会话

双击上图中红框的应用程序后,软件会启动,界面启动后如下图所示: 下面来创建第一个SSH 会话。点击菜单栏 「会话」 --> 「新建会话」,即可弹出 「会话设置」 对话框,如下图所示: 在会话设置框里面选择串口…

西门子Mendix低代码资深技术顾问张戟,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日,第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导,企智未来科技(LowCode低码时代、RPA中国、AIGC开放社区)主办。大会旨在聚合每一位产业成员的力量,深入探索低…

生物分子体系结构预测开源模型RoseTTAFold All-Atom的conda环境部署及使用

欢迎浏览我的CSND博客! Blockbuater_drug …点击进入 文章目录 前言一、RoseTTAFold All-Atom(RFAA)是什么?二、安装步骤1. 安装mamba(非必须的,conda也可以)2. 下载RoseTTAFold-All-Atom3. 创建conda环境并安装4. 安装…

协议-http协议-基础概念04-长短连接-重定向-cookie-缓存-代理

参考来源: 极客时间-透视HTTP协议(作者:罗剑锋); 01-长短连接 HTTP 协议最初(0.9/1.0)是个非常简单的协议,通信过程也采用了简单的“请求 - 应答”方式。 它底层的数据传输基于 TCP/IP,每次发…

程序人生 - 爬虫者,教育也!

作为一个站长,你是不是对爬虫不胜其烦?爬虫天天来爬,速度又快,频率又高,服务器的大量资源被白白浪费。 看这篇文章的你有福了,我们今天一起来报复一下爬虫,直接把爬虫的服务器给干死机。 本文有…

ubuntu安装开源汇编调试器NASM

安装 安装很简单,直接在终端输入以下命令即可 sudo apt-get install nasm 安装完成后,如果可以查看到nasm的版本号即可视为安装成功 nasm -version 测试 创建汇编文件 创建一个asm文件 vim hello.asm 文件内容如下 section .datahello: db …

如何高效进行 API 性能测试:详细教程

在构建和维护 API 时,性能和稳定性是至关重要的考量因素,API 的性能直接影响着用户体验和系统的可用性,因此对其进行全面的性能测试是不可或缺的一环。 针对 API 的性能测试,一般通过模拟实际用户行为、压力测试和负载测试等方式…

记一次无vmcore内存死机问题分析过程

问题现象 客户发现在物理机上跑读写业务时,出现了一次死机现象,kdump服务未抓到vmcore文件。/var/log/messages里没有发现内核panic报错信息,只有call trace的警告信息。抓取到的call trace信息总共有三种类型:内存分配失败、rmm…

7.无重复字符的最长字串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为…

Unity性能优化篇(十一) 动画优化

1.恰当地设置Animator组件的Culling Mode。Always Animate表示如果该动画不可见,也会播放它。Cull Update Transformations表示如果该动画不可见,则不会渲染该动画,但是依然会根据该动画的播放来改变游戏对象的位置、旋转、缩放,这…

2024计算机软考基本介绍、考试时间、考试科目等2024年软考新变化政策 证书的作用

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级…

【考研数学】张宇学习包

张宇的授课侧重于启发学生的综合思维能力。对于基础较好的学生而言,在听完他的课后,解题通常不会构成太大问题,而且可以学到许多解题技巧,其中包括张宇老师创造的易记的“点火公式”。 然而,对于基础较薄弱的学生来说…

无人机手持地面站软件功能详解,无人机手持地面站软件开发人员组成及成本分析

无人机手持地面站软件是专为无人机操控和任务管理设计的移动应用,它通常集成在智能手机、平板电脑或其他便携式设备上,使得用户可以在远离无人机的地方对飞行器进行实时监控与远程控制。 主要功能详解: 1. 飞行控制与姿态显示: …

基于springboot+vue实现乌鲁木齐南山冰雪旅游服务网管理系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现南山冰雪旅游服务网演示 摘要 随着2022年北京冬奥会的成功举办,在冬天进行冰雪运动已经逐渐流行起来,人们慢慢享受到了冰雪活动给大家带来的欢乐,除此之外人们的身体素质也可以得到提升。虽然已经有一部分人可以接受并…

关于yolov8文档的记录,补充一些整理的知识点

2023年由Ultralytics 提供了YOLOv8开源项目。YOLOv8 支持全方位的视觉 AI 任务,包括检测、分割、姿态估计、跟踪和分类。这种多功能性使用户能够在各种应用和领域中利用YOLOv8 的功能。安装yolov8开源项目 pip install githttps://github.com/ultralytics/ultralyti…

微信小程序开发系列(二十四)·wxml语法·列表渲染·wx:for-item 和 wx:for-index

目录 1. 如果需要对默认的变量名和下标进行修改,可以使用wx:for-item 和 wx:for-index 2. 将 wx:for 用在 标签上,以渲染一个包含多个节点的结构块 方法一 方法二 3. 总结 3.1 wx:for-item 和 wx:for-index总结 3.2 总结 1. 如果需要对默…

新品发布:广州大彩科技COF系列2.1寸480*480 IPS 串口屏发布!

一、产品介绍 该产品是一款2.1寸分辨率为 480480的医用级工业组态串口屏,拥有2.1寸IPS液晶屏,分辨率有480480(实际显示为R240内切圆区域),支持电容触摸。采用COF超薄结构工艺设计,用户安装便捷灵活&#x…

力扣hot100:240.搜索二维矩阵II(脑子)

吉大21级算法分析与设计的一道大题,由于每一行都是排好序的直接逐行二分 可以达到:O(mlogn)。但是这里追求更广的思路可以使用其他方法。 矩阵四分: 在矩阵中用中心点比较,如果target大于中心点的值,则由于升序排列&am…

【C++】string类(介绍、常用接口)

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:http://t.csdnimg.cn/eCa5z 目录 string类的常用接口说明 string类对象的常见构造 ​编辑 string字符串的遍历(迭代器&#xf…

Python网站的搭建和html基础

1.Python网站代码及讲解 一般我们搭建小型的网站就用flask库就行了。 (1)安装flask库 安装完python后,按住windows徽标键和r,弹出“运行”,在里面输入cmd。 回车打开,输入“pip install flask”。 (2&am…