从一到无穷大 #21 从基于多数据模型分析负载的Benchmark讨论多模数据库的发展方向

在这里插入图片描述本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。

文章目录

  • 引言
  • M2Bench测试结果
  • 从Lindorm看待多模的发展方向
  • 总结

引言

《M2Bench: A Database Benchmark for Multi-Model Analytic Workloads》阐述了一种测试多模型数据库系统的Benchmark方法,我理解对于Benchmark而言,核心点在于测试方法与数据生成。

测试方法的角度看,M2Bench基于E-Commerce,Healthcare,Disaster&Safety三个业务场景,总结出17种涉及 relational, document-oriented, property graph, 以及 array models 四个数据模型的操作集合,以此作为测试多数据模型分析负载的Benchmark主体。

从数据生成的角度看,M2Bench在不同的场景使用不同的已有公共数据集合:
在这里插入图片描述
这与[5]中的基于GAN(Generative Adversarial Network)+LSH(Locality-Sensitive Hashing)生成时序数据集的思路完全不一样。

作为同样以Benchmark的设计入选vldb2023的TSM-BenchMark[5],测试方法与数据生成是实际的创新点;而M2Bench则把可以用一个Benchmark测试多数据模型分析负载作为创新点,但是我认为因为其数据生成和测试方法固化以及几乎无法改变测试的数据模型,实际在业界大推广M2Bench基本没有太大价值,可以说就是一个小圈子内的狂欢。

于我个人而言,M2Bench的价值则另有所在:

  1. 从一个复杂业务的角度如何测试底层数据库的使用方式
  2. 文章的测试阶段选择使用 MySQL, MongoDB, Neo4j, SciDB作为对照组,与ArangoDB(json/graph/kv/search engine,测试中relational和array使用json模拟)/ AgensGraph(relational/graph) 同时执行现有的测试,我认为这从业务使用角度论证了多模数据库的发展方向

M2Bench测试结果

综前所述,我认为数据集,不同模型间表的设计以及测试本身内容都不重要,我们关注结果就可以
请添加图片描述
表1描述了M2Bench的17种任务操作所涉及的数据模型。

测试的环境为:a standalone machine with Intel i7-9700K CPU, 32GB RAM, and a 512GB SSD running Ubuntu18.04.4 LTS,比较理想化
请添加图片描述
时延对比当然不是衡量数据库整体质量的正确方式,而且看论文中的描述也是先导入写再测试读的离线场景,与实际运营场景不一致,这点瑕疵我们暂时不谈。上图描述了Polyglot( MySQL, MongoDB, Neo4j, SciDB)与ArangoDB / AgensGraph 在17个任务下的查询时延对比。

从上述结果我们可以得到以下结果:

  1. 在需要密集array计算的场景下 Polyglot 优于 ArangoDB / AgensGraph [T2, T9, T14, T15]。原因是 SciDB 的原生存储引擎以块为单位存储数组,从而保留了数组单元的locality。AgensGraph 和 ArangoDB 分别以table和collection的形式存储数组,其中每一行或每一个文档代表一个数组。因此矩阵乘法等数组操作将不得不访问随机分散的行,从而导致过多的磁盘 I/O 操作。但是T16是一个例外,虽然需要array操作,但是polyglot 系统的性能不是最好的,因为 T16 需要随机迭代访问数组单元。这种访问模式对 polyglot 系统并不有利。
  2. ArangoDB 拥有原生graph/json引擎,在 [T4, T8, T11, T12, T13]优于其他两者
  3. AgensGraph 拥有原生relational引擎,在 [T0, T1, T3, T5, T7, T10, T16]优于其他两者。虽然AgensGraph使用relational引擎支持图模型,并不是原生支持图引擎,但是在部分图操作中AgensGraph快于ArangoDB。
  4. 原则上 Polyglot 每一种模型都选择了对应数据模型的龙头产品,但是Polyglot并不是每一种负载都是最优的选择,原因是假如两张表存在于两个模态的数据库时,执行连接操作非常缓慢,需要频繁的调用一方的查询操作

基于上述结果我们可以得到如下结论:

  1. 结论1:基于统一kv/宽表底座的多模型数据库是错误的方向,只有不同模型拥有不同的存储引擎才可以带来最大的综合性能优势
  2. 结论2:哪怕是最优秀的存储引擎也只是在Trade-off,没有一种设计可以保证所有情况下的最优,所以需要智能化调优,并在项目选型之初选择最适合业务场景的引擎。
  3. 结论3:完全独立的多个不同模型数据库对于联合分析的场景性能较差

从Lindorm看待多模的发展方向

早在2019年,李飞飞老师在[4]中讨论了未来数据库的发展趋势将会集中在以下几个方面:

  1. 云原生与分布式
  2. 大数据与数据库一体化
  3. 软硬件协同
  4. 多模型
  5. 智能化运维,自治性与智能性
  6. 安全可信

对于其中的多模型分析,李飞飞老师在当年将其发展归结为两个方面:

  1. southbound multi-model access:底层存储支持不同的数据格式和数据源。存储的数据可以是结构化的,也可以是非结构化的,如图形、vector和文档存储。数据库提供统一的查询接口,如 SQL 或类似 SQL 的接口,以查询和访问各种类型的数据源和数据格式,形成数据湖服务。除此之外,许多云应用需要从异构来源收集大量数据,并进行联合分析
  2. northbound multi-model access:北向多模型访问表示使用单一数据模型和格式(如大多数情况下的键值模型)将所有结构化、半结构化和非结构化数据存储在单一数据库中。在这种单一存储模型的基础上,数据库根据应用需要支持多种查询接口,如 SQL、SPARQL 和 GQL

当时看这篇[4]论文的这个论点没有明白,结合[3]的实验结论,有一种豁然开朗的感觉。

五年过去了,我们回过头看下2024年Lindorm的产品架构文档设计图[7]:
在这里插入图片描述
官方介绍稿中点出了Lindorm顶层设计上的几个重点:

  1. 存储计算分离
  2. 其中云原生分布式文件系统LindormDFS为统一的存储底座,向上构建各个垂直专用的多模数据引擎,包括宽表引擎、时序引擎、搜索引擎、流引擎等。
  3. 在多模引擎之上,Lindorm既提供统一的SQL访问,支持跨模型的联合查询;又提供多个开源标准接口(HBase/Cassandra、OpenTSDB/InfluxDB、Kafka、HDFS),满足存量业务无缝迁移的需求。
  4. 数据通道服务(LTS)负责引擎之间的数据流转和数据变更的实时捕获,以实现数据迁移、实时订阅、数湖转存、数仓回流、单元化多活、备份恢复等能力。

从现在的结果看,Lindorm的发展确实是按照着李飞飞老师的预期在走的。

总结

从目前的知识体系来看,Lindorm的顶层设计我认为没有明显的短板,这也许是Lindorm TSDB的设计可以入选vldb2023的原因。

但是也并不是毫无进步的余地,以本文得到的结论2看,数据库引擎自动化调优的方向还有极大的优化空间,尤其是是时序模态,因为目前主流的时序模态都允许按照时间粒度切分物理存储,这使得我们有机会去修改新存储的引擎结构。像kv,json这样的模态引擎基于物理数据的分裂合并去实现扩缩容就很难去修改引擎结构,只能做一些参数上的优化。

参考:

  1. Why Arrays as a Universal Data Mode
  2. 邻接矩阵的COO格式
  3. M2Bench: A Database Benchmark for Multi-Model Analytic Workloads vldb2023
  4. Cloud-Native Database Systems at Alibaba: Opportunities and Challenges vldb2019
  5. 从一到无穷大 #14 Online, realistic data, querying variable Time Series Database Benchmark
  6. 从历史见证未来,Distributed SQL?云原生数据库? 多模型数据库?
  7. Lindorm产品架构
  8. 从一到无穷大 #13 How does Lindorm TSDB solve the high cardinality problem?

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

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

相关文章

【手撕C语言 第六集】函数(上)

文章目录 一、函数是什么?二、C语言中函数的分类:1.库函数1.1 如何学会使用库函数? 2. 自定义函数 三、函数的参数1.实际参数(实参):2.形式参数(形参): 四、函数的调用&a…

JS加密/解密之一个少见的js解密

直接上源代码 (function(){var tfK,EAc715-704;function JQI(d){var q514800;var yd.length;var i[];for(var v0;v<y;v){i[v]d.charAt(v)};for(var v0;v<y;v){var pq*(v245)(q%31355);var eq*(v264)(q%20133);var kp%y;var oe%y;var mi[k];i[k]i[o];i[o]m;q(pe)%3352359…

【漏洞复现】Hikvision综合安防管理平台config信息泄露漏洞

Nx01 产品简介 Hikvision&#xff08;海康威视&#xff09;是一家在中国颇具影响力的安防公司&#xff0c;其网络摄像头产品在市场上占据了相当大的份额。综合安防管理平台基于“统一软件技术架构”理念设计&#xff0c;采用业务组件化技术&#xff0c;满足平台在业务上的弹性扩…

关于程序员的未来的这件事情,我是这么看的!

关于程序员的未来在哪里&#xff1f;很多想做程序员以及已经入坑的程序员都想知道&#xff0c;我作为一名工龄超过12年的资深大龄程序员&#xff0c;我其实也想知道&#xff0c;我也没办法确定程序员的未来在哪里。 或者我也不知道&#xff0c;为什么互联网当初招聘那么多的程…

【数据库原理】(37)Web与数据库

随着网络的高速发展和网络服务的日趋完善&#xff0c;网络上的信息量呈几何级数增长。为了有效地组织、存储、管理和使用网上的信息&#xff0c;数据库技术被广泛地应用于网络领域。特别是在Internet上&#xff0c;已建立了数以万计的网站&#xff0c;其中大中型网站的后台大多…

【数据库原理】(38)数据仓库

数据仓库&#xff08;Data Warehouse, DW&#xff09;是为了满足企业决策分析需求而设计的数据环境&#xff0c;它与传统数据库有明显的不同。 一.数据库仓库概述 定义: 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持企业管理和…

机械设计-哈工大课程学习-螺旋传动

二、摩擦类型 1、静态摩擦&#xff1a;这是身体静止时所经历的摩擦。换句话说&#xff0c;就是身体有运动倾向时的摩擦力。 2、动态摩擦&#xff1a;这是身体在运动时所经历的摩擦。也称为动摩擦。动摩擦有以下两种类型&#xff1a; ①滑动摩擦&#xff1a;一个物体在另一个…

C# Socket通信从入门到精通(17)——单个异步UDP服务器监听一个客户端C#代码实现

前言: 我们在开发UDP通信程序时,除了开发UDP同步客户端程序,有时候我们也需要开发异步UDP服务器程序,所谓的异步最常见的应用就是服务器接收客户端数据以后,程序不会卡在数据接收这里,而是可以继续往下执行,这在实际项目中是经常会遇到的,所以说掌握异步UDP服务器程序…

学会这个工具,小白也可制作门窗电子画册

​随着互联网技术的发展&#xff0c;现在制作电子画册已经变得非常简单。如果你是一个新手&#xff0c;也可以通过学习一些技巧来制作门窗电子画册。 那么&#xff0c;如何制作门窗电子画册呢&#xff1f;其实&#xff0c;这个过程并不复杂。只需要一台电脑和一个基本的操作工具…

K8s(七)四层代理Service

Service概述 Service在Kubernetes中提供了一种抽象的方式来公开应用程序的网络访问&#xff0c;并提供了负载均衡和服务发现等功能&#xff0c;使得应用程序在集群内外都能够可靠地进行访问。 每个Service都会自动关联一个对应的Endpoint。当创建一个Service时&#xff0c;Ku…

Es bulk批量导入数据(1w+以上)

最近在学习es的理论知识以及实际操作&#xff0c;随时更新~ 概要&#xff1a;首先你得有1w条数据的json&#xff0c;然后用java读取json文件导入 一. 创建Json数据 首先我生成1.5w条数据&#xff0c;是为了实践分页查询&#xff0c;用from-size和scroll翻页去实践 生成四个字段…

检索增强(RAG)的方式---重排序re-ranking

提升RAG&#xff1a;选择最佳嵌入Embedding&重排序Reranker模型 检索增强生成(RAG)技术创新进展&#xff1a;自我检索、重排序、前瞻检索、系统2注意力、多模态RAG RAG的re-ranking指的是对初步检索出来的候选段落或者文章&#xff0c;通过重新排序的方式来提升检索质量。…

mac安装部署gitbook教程

mac安装部署gitbook教程 前言一、安装准备二、GitBook安装项目初始化 前言 一些自己实际操作的记录。 一、安装准备 Node.js gitbook基于Node.js&#xff0c;所以需要提前安装。 下载地址&#xff1a;https://nodejs.org/en/&#xff0c;可以下载比较新的版本。(但我的建议是不…

Linux指令补充和权限简单介绍

一.tar指令 形式&#xff1a;tar [-cxtzjvf] 文件与目录 ....
 参数&#xff1a;
 -c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b; -x &#xff1a;解开一个压缩文件的参数指令&#xff01; -t &#xff1a;查看 tarfile 里面的文件&#xff01; -…

为什么C++17要引入std::string_view?

目录 1.引言 2.原理分析 2.1.结构 2.2.构造函数 2.3.成员函数 2.4.std::string_view字面量 3.实例 3.1.std::string_view和std::string的运算符操作 3.2.查找函数使用 3.3.std::string_view和临时字符串 4.总结 1.引言 在C/C日常编程中&#xff0c;我们常进行数据的…

JDK8新增的时间类

目录 内容大纲&#xff1a; 1、Zoneld时区 2、Instant时间戳 3、ZoneDateTime带时区的时间 4、DateTimeFormatter用于时间的格式化和解析 5、Calendar类&#xff1a; 6、工具类 内容大纲&#xff1a; 1、Zoneld时区 方法名说明static Set<String>getArailableZoneIds()获…

java集合(4)

1.HashSet集合 1.1HashSet集合概述和特点【应用】 底层数据结构是哈希表 存取无序 不可以存储重复元素 没有索引,不能使用普通for循环遍历 1.2HashSet集合的基本应用【应用】 存储字符串并遍历 public class HashSetDemo {public static void main(String[] args) {//创…

MCU常用外设总线

目录 前言一、时钟与中断二、GPIO三、ADC四、定时器4.1 基本定时器4.2 通用定时器4.2.1 输入捕获4.2.2 输出比较 五、UART六、IIC七、SPI 前言 本文主要讲单片机外设的功能&#xff0c;即这些外设是什么&#xff0c;可以用来干什么&#xff0c;了解了之后我们就可以通过相应的寄…

学校服务器hpc东南大学,下载国家基因组科技中心数据 gsa-human ascp chatpt建议 Linux系统中写代码

使用ascp批量下载数据 You files.csv 帮我写个批量下载的脚本&#xff0c;批量下载时候&#xff0c;把路径中最后的HRR659816批量替换成 Accession列的内容就行了。下面是示例 ascp -v -QT -l 300m -P33001 -k1 -i ~/.aspera/connect/etc/aspera01.openssh_for_gsa -d asper…

贝锐蒲公英云AP体验:云端快速部署、远程管理,轻松满足办公环境

公司原本的网络由于采用多个路由器&#xff0c;导致无线信号杂乱&#xff0c;管理不便&#xff0c;且远程办公体验较差&#xff0c;作为IT负责人的我&#xff0c;一直想寻找一个可以实现网络统一管理并有效提升远程工作便捷性的产品。 于是&#xff0c;我决定在公司内部部署贝…