《UniBench A Benchmark for Multi-Model Database Management Systems》阅读笔记
说明:论文地址
概述
多模型数据库(Multi-Model DataBase, MMDB)是数据库管理系统的一个新兴趋势,它利用单一平台来管理存储在不同模型中的数据,如文档、图、关系和键值对。
数据库Benchmark是评估和比较DBMS的重要工具。然后,近些年很少有专门针对多模型数据库设计的Benchmark。
评估MMDBs的两大挑战:
- 生成合成的多模型数据
- 设计多模型工作负载
多模型数据库的演变:
- 第一阶段:多克隆持久化(Polyglot Persistence)方法,利用大量数据库来处理不同形式的数据,并将其集成以提供统一的接口,但操作复杂,成本高。
- 第二阶段
- 许多SQL-extension或NoSQL系统整合额外的引擎或函数到一个统一的平台,转变为多模型系统。
- 许多原生的多模型系统出现,如ArangoDB、OrientDB和AgensGraph,这些系统利用单个存储来管理多模型数据,使用统一或混合的查询语言。
多模型数据库Benchmark生成的相关工作:TPC-DI(XML,CSV和文本)、Big-bench(TPC中的结构数据、半结构数据日志和无结构数据评论)。
已有工作的缺陷:都没有考虑JSON和图数据,但这两类数据如今非常常见。只考虑简单的工作负载(wordload),如CRUD操作、聚合、图深度遍历,但没考虑涉及多模型特征的复杂工作负载。
为此,作者设计了可以生成五类模型数据的数据生成器,以及专门为多模型数据库设计的工作负载(包括10个查询和2种事务),并在两个多模型数据库ArangoDB和OrientDB上进行了测评。
数据生成
针对多模型数据生成,作者提出了三阶段数据生成框架,三个阶段如下图所示:
购买阶段(Purchase):从元数据仓库中获取数据,生成图以及人的兴趣。
传播购买阶段(Propagation-Purchase):根据前一阶段的数据,生成冷启动(cold-start)顾客的兴趣。
再购买阶段(Re-purchase):根据CLVSV模型为所有的顾客生成兴趣。
在每个阶段,根据顾客的兴趣生成事务数据,然后将三个阶段生成的数据整合成一个多模型数据集。
Purchase
LDBC生成人们的兴趣。每个人事务的数量等于兴趣数除常量ccc,每个事务的大小由参数为λ\lambdaλ的泊松分布决定,每个事务的产品是随机从兴趣中选取的。对应事务生成JSON格式的订单,与此同时使用相同的信息生成XML格式的发票。此外,会从亚马逊数据集中随机选择产品的真实评论和评级作为反馈。
本阶段的数据由5个模型组成:社交网络(Graph)、供应商和顾客(Relation)、订单和产品(JSON)、发票(XML),反馈(键值对)。
LDBC是一个社交网络benchmark。
Propagation-Purchase
该阶段主要是为没有兴趣的人生成相应的事务,其兴趣来源于朋友,依据是具有相同属性的人更有可能有相同的行为,人们也信任朋友的产品推荐。 具体做法以朋友评级过的产品作为候选集,然后利用公式(1)计算相应的分数,选择前nn%n作为当前人的兴趣,并生成相应的事务。
Sui=∑kk×Pr(Rui=k∣A=au)+E(Rvi:∀v∈N(u))(1)S_{u i}=\sum_{k} k \times \operatorname{Pr}\left(R_{u i}=k \mid A=a_{u}\right)+E\left(R_{v i}: \forall v \in N(u)\right) \tag{1} Sui=k∑k×Pr(Rui=k∣A=au)+E(Rvi:∀v∈N(u))(1)
公式(1)中∑kk×Pr(Rui=k∣A=au)\sum_{k} k \times \operatorname{Pr}\left(R_{u i}=k \mid A=a_{u}\right)∑kk×Pr(Rui=k∣A=au)表示目标用户uuu对产品iii的评分的概率期望,其中A={a1,a2,...,am}A = \{a_1, a_2, ...,a_m \}A={a1,a2,...,am}是根据朴素贝叶斯方法计算的用户属性集,朴素贝叶斯模型的训练是以Purchase阶段的数据作为训练集进行训练的。E(Rvi:∀v∈N(u))E\left(R_{v i}: \forall v \in N(u)\right)E(Rvi:∀v∈N(u))是uuu的朋友对目标产品的评分的期望,其中N(u)N(u)N(u)是uuu的朋友的集合,产品iii来自朋友在Purchase阶段的事务。
Re-Purchase
本阶段主要生成用户再次购买的数据。作者提出了一个新概率模型CLVSC(Customer Lifetime Value in Social Commerce, 社会商务中的顾客终身价值 ),通过结合客户的品牌社交活动来进行细粒度预测。该模型由三个部分组成:
- 期望的行为数量
- 期望的货币价值
- 客户期望的积极社会参与度
CLVSC同样定义了一个关于顾客和品牌的打分模型(公式2),用来估计顾客对品牌的兴趣,然后从前nnn个品牌获取mmm个兴趣,并生成与购买阶段相同的兴趣。
Sib(CLVSC)=E(X∗∣n∗,x′,n,m,α,β,γ,δ)×(E(M∣p,q,v,mx,x)+E(S∣sˉ,θ,τ))S_{i b}(C L V S C) =E\left(X^{*} \mid n^{*}, x^{\prime}, n, m, \alpha, \beta, \gamma, \delta\right) \times \left(E\left(M \mid p, q, v, m_{x}, x\right) + E(S \mid \bar{s}, \theta, \tau)\right) Sib(CLVSC)=E(X∗∣n∗,x′,n,m,α,β,γ,δ)×(E(M∣p,q,v,mx,x)+E(S∣sˉ,θ,τ))
该公式的第一部分E(X∗∣n∗,x′,n,m,α,β,γ,δ)E\left(X^{*} \mid n^{*}, x^{\prime}, n, m, \alpha, \beta, \gamma, \delta\right)E(X∗∣n∗,x′,n,m,α,β,γ,δ)表示顾客基于历史行为数据在接下来nnn个时段内期望的行为数,其中(x′,n,m)(x',n,m)(x′,n,m)表示顾客行为的历史数据,而(α,β)(\alpha,\beta)(α,β)和(γ,δ)(\gamma, \delta)(γ,δ)分别表示活跃概率和非激活概率的beta分布参数,行为包括购买和发布两种。该公式的第二部分E(M∣p,q,v,mx,x)E\left(M \mid p, q, v, m_{x}, x\right)E(M∣p,q,v,mx,x)表示期望的货币价值。而公式的第三部分E(S∣sˉ,θ,τ)E(S \mid \bar{s}, \theta, \tau)E(S∣sˉ,θ,τ)表示客户的期望社会参与度 ,作者假设其服从一个参数为λ\lambdaλ的泊松过程,λ\lambdaλ中的异质性在客户中遵循形状参数θ\thetaθ和速率参数τ\tauτ的伽马分布。
工作负载
数据库工作负载:All the SQL statements that execute against a database comprise the workload for that database. 即针对数据库执行的SQL构成该数据库的一个工作负载。
UniBench从商业案例和技术角度定义了相关的多种工作负载,其中相关的SQL都涉及至少两种数据模型,旨在覆盖不同的商业案例和技术角度。
作者定义的工作负载中,即有传统的OLTP查询,也有OLAP查询。
商业案例
从商业案例的角度,工作负载分为如下4个层级:
- 个体(individual):多个数据源获取数据来构建用户画像。Q1
- 会话(conversation):分析用户的半结构和结构数据,从反馈中捕捉用户情绪,然后调整在线广告或运营策略。Q2和Q3
- 社区(community):挖掘社区常见的购买模式和分析社区对个人购买行为的影响。Q4、Q5和Q6
- 商业(commerce):分类优化和性能透明。Q7、Q8、Q9和Q10。
具体Query参见原论文,限于篇幅就不列了。
技术维度
UniBench的的工作负载设计基于瓶颈技术,在处理查询时测试数据库的许多方面。通常,这些方面可能涉及数据库的不同组件,例如查询优化器、执行引擎和存储系统。此外,该工作负载不仅涉及传统数据库系统常见的查询处理挑战,还包括多模型查询处理的一些新问题。作者列出了3个关键点:
- 选择合适的联结类型和联结顺序:由于涉及不同的数据模型,不同连接顺序和类型的执行时间可能会有数量级的差异。主要测试查询优化器是否能够找到最优的联结顺序和类型。
- 执行复杂聚合:面向复杂数据结构的聚合,聚合的嵌套。这些聚合涉及多个数据模型数据的合并。
- 确保一致性和效率:测试数据库的ACID特性。主要测试执行引擎和存储系统寻找合适并发控制技术来保证一致性和效率的能力,对于MMDB还需要保证数据模型的一致性。
例子
作者在论文中以Q5为例,其对应的查询是:
给定一个起始用户和一个产品目录,寻找他在Graph中的3阶朋友,以及他们购买的包含在给定目录下的产品,最后返回这些产品5星评级的反馈。
该查询涉及3个数据模型:Graph、JSON和KV,涉及三种Join操作:Graph-Graph、Graph-JSON和JSON-KV,该查询带来的挑战:图的递归路径查询、JSON的嵌入式数组操作,以及键值的复合键查找。
实验
实验的数据库:OrientDB和ArangoDB
数据集
作者生成了三个数据集,其相关数据如下:
针对不同大小的系统,Unibench定义了一组比例因子(SF)。上述三个数据集分别包含1GB、10GB和30GB的数据。
导入时间
作者首先测试对比了两个不同数据库对三个数据集SF1、SF10和SF30的导入时间,导入时间结果如下:
额外时间是指联结操作的代价,OrientDB需要使用CREATE LINK命令在关系数据和JSON数据之间创建反向链接
结论:对于SF1、SF10和SF30,ArangoDB的导入分别比OrientDB快7.5、3.4和3.8倍。
两个数据库都不支持原生XML,所以没有对XML进行测试,KV的导入合并到了Relational中。
多模型数据库查询性能
作者对比测试了两个数据库在Q1~Q10等10个多模型查询上的处理时间,对比结果如下:
结论:除了Q5,其它查询的处理都是ArangoDB更快。
事务性能
作者还对比测试了两个多模型数据库在普通OLTP事务上的性能,其中ArangoDB是异步处理,而OrientDB是同步处理,其对应于两种事务New Order和Payment的吞吐量展示如下:
结论:ArangoDB在写重(write-heavy)事务(Payment)方面更好,OrientDB在执行读重(read-heavy)事务(New Order)方面更高效。
《UniBench A Benchmark for Multi-Model Database Management Systems》阅读笔记相关推荐
- trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer
一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...
- VoxelNet阅读笔记
作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记
- Transformers包tokenizer.encode()方法源码阅读笔记
Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode
- 源码阅读笔记 BiLSTM+CRF做NER任务 流程图
源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...
- Mina源码阅读笔记(一)-整体解读
2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...
- “CoreCLR is now Open Source”阅读笔记
英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...
- QCon 2015 阅读笔记 - 团队建设
QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...
- 05《软件需求模式》阅读笔记
剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...
- [置顶] Linux协议栈代码阅读笔记(一)
Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...
- 大型网站技术架构:核心原理与案例分析阅读笔记二
大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...
最新文章
- [git]git相关
- elementUI vxe-table结合使用(通用表格)
- 前端学习(1972)vue之电商管理系统电商系统之弹出修改对话框
- BZOJ 2005: [Noi2010]能量采集( 数论 + 容斥原理 )
- 字段的某记录相同,但是时间不同,找到MySQL里面最新的数据
- laravel 与 tp5 获取控制器 方法名
- 从0开始html前端页面开发_CSS实现图像获取鼠标焦点逐渐变大动画效果
- python中win32api模块_解决在Python中使用Win32api报错的问题,No module named win32api
- 如何将nupkg离线安装包安装到VS2017、9
- 2022年瑞典经济发展研究报告
- 判断邮箱格式是否正确
- linux匿名邮件,Linux下用mutt给QQ邮箱发匿名邮件
- CRM如何维护客户关系?CRM成功案例分析
- 虚拟服务器网络未识别,vm虚拟机未识别的网络
- android tasker,Android 神器,Tasker 实战
- CF 949D Curfew——贪心(思路!!!)
- 小米mini路由小米3 PandoraBox下载地址
- Use of Deep Learning in Modern Recommendation System: A Summary of Recent Works(笔记)
- 毕业设计 STM32老人防摔倒报警系统 - 物联网 嵌入式 单片机
- 解决C Runtime R6034的错误