从一到无穷大 #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?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 面向对象 03 就近原则和this关键字

对于起名字需要见名知意,所以这个String n 不太合适: 但是如果将n改为name,会与第五行代码的name重复: 运行代码发现,获取后的姓名为默认值,是null 引入就近原则: 此处打印的是age10&#xff0c…

CPU相关专业名词介绍

CPU相关专业名词 1、CPU 中央处理器CPU(Central Processing Unit)是计算机的运算和控制核心,可以理解为PC及服务器的大脑CPU与内部存储器和输入/输出设备合称为电子计算机三大核心部件CPU的本质是一块超大规模的集成电路,主要功…

2024.1.21周报

目录 摘要 ABSTRACT 一、文献阅读 一、题目 二、摘要 三、Introduction 四、模型 一、连续时间模型 二、离散时间模型 五、结论 二、实验代码 Navier–Stokes equation 总结 摘要 本周我阅读了一篇题目为Physics-informed neural networks: A deep learning fra…

IDEA2023.2 将普通项目转Maven项目

1、选中一个普通工程: 2、快捷键:ctrlshift a,搜索:Add Framework Support… 3、勾选maven,点击ok。

信息安全概述

信息安全:防止任何对数据进行未授权访问的措施,或者防止造成信息有意无意泄漏、破坏、丢失等问题的发生,让数据处于远离危险、免于威胁的状态或特性。 网络安全:计算机网络环境下的信息安全。 信息安全现状及挑战 数字化时代威…

分布式 session

分布式 session 种 session 的时候需要注意范围,也就是 cookie.domain。 比如两个域名:a.heo.com,b.heo.com。如果要共享 cookie,可以种一个更高层的公共域名,比如 heo.com。 当服务器 A (localhost:808…

构建高可用消息队列系统 01

构建高可用消息队列系统 01 引言1. RabbitMQ简介介绍1.1 什么是RabbitMQ1.2 RabbitMQ的核心特性1.3 RabbitMQ与AMQP 2.安装RabbitMQ3.消息队列实践总结 引言 在当今互联网时代,消息队列系统扮演着至关重要的角色,它们被广泛应用于分布式系统、微服务架构…

黑马Java——ArrayList集合

目录 1.ArrayList 集合和数组的优势对比: 1.1 ArrayList类概述 1.2 ArrayList类常用方法 1.2.1 构造方法 1.2.2 成员方法 2.练习 2.1添加字符串和数组并遍历 2.1.1添加字符串 2.1.2添加数字 2.2添加学生对象并遍历 2.2.1直接给字符串赋值 2.2.2对象的数…

【Unity学习笔记】Unity TestRunner使用

转载请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/details/135733479 作者:CSDN|Ringleader| 参考: Input testingGetting started with Unity Test FrameworkHowToRunUnityUnitTest如果对Unity的newInputSystem感…

STM32 Hal库FreeRtos查看所有任务的内存栈信息使用情况剩余空间 仅需一个函数搞定 超简单

STM32F103 基于Hal库跑FreeRtos,查看所有任务的栈的信息,包括任务名,任务状态,任务优先级,空闲栈,任务号。 运行结果如下 只需要使用一个函数vTaskList :获得任务的统计信息,形式为…

2024年,给程序员的六点建议

作为程序员,持续进步和发展是至关重要的。除了技术能力的提升,还有一些关键的行为和思维方式可以帮助工程师在职业生涯中取得更大的成功。本文将提供六个重要的建议,这些建议将帮助程序员在职业生涯中迈出成功的步伐。 走出舒适区 走出舒适区…

HarmonyOS【应用服务开发】在模块中添加Ability

Ability是应用/服务所具备的能力的抽象,一个Module可以包含一个或多个Ability。应用/服务先后提供了两种应用模型: FA(Feature Ability)模型: API 7开始支持的模型,已经不再主推。Stage模型:AP…

CMU15-445-Spring-2023-分布式DBMS初探(lec21-24)

Lecture #21_ Introduction to Distributed Databases Distributed DBMSs 分布式 DBMS 将单个逻辑数据库划分为多个物理资源。应用程序(通常)并不知道数据被分割在不同的硬件上。系统依靠单节点 DBMS 的技术和算法来支持分布式环境中的事务处理和查询执…

企业SRC挖掘个人看法

昨晚上课网安的老师带我们现场挖掘漏洞&#xff0c;可谓是一场视觉盛宴&#xff01;&#xff01;&#xff01; <---老师 我--> 真的没有对比就没有伤害&#x1f62d;&#x1f62d;&#x1f62d;&#xff0c;其间他也分享了一些漏洞挖掘的思路&#xff0c;让我来回顾…

Mysql-全局锁、表锁、行锁

本文已收录于专栏 《数据库》 目录 全局锁概述说明开启方式应用场景 表锁概念说明实现方式意向锁 开启方式 行锁概念说明实现方式记录锁&#xff1a;间隙锁临键锁 总结提升 全局锁 概述说明 全局锁是是对整个数据库实例加锁&#xff0c;加锁后整个实例就处于只读状态&#xff…

智慧文旅运营综合平台:重塑文化旅游产业的新引擎

目录 一、建设意义 二、包含内容 三、功能架构 四、典型案例 五、智慧文旅全套解决方案 - 210份下载 在数字化浪潮席卷全球的今天&#xff0c;智慧文旅运营综合平台作为文化旅游产业与信息技术深度融合的产物&#xff0c;正逐渐显现出其强大的生命力和广阔的发展前景。 该…

Java--类继承

文章目录 主要内容一.学生类1.源代码代码如下&#xff08;示例&#xff09;: 2.结果 二.交通工具类1.源代码代码如下&#xff08;示例&#xff09;: 2.结果 三.圆类1.源代码代码如下&#xff08;示例&#xff09;: 2.结果 总结 主要内容 学生类交通工具类圆类 一.学生类 具有…

幻兽帕鲁开服教程——游戏

幻兽帕鲁开服教程——游戏 1. 安装服务器2. 服务器配置调整3. 运行环境Microsoft Visual C Runtime4. 加入服务器 这是研究开服时顺手写的笔记&#xff0c;也方便后来者。 如果你熟悉你所使用的操作系统的话&#xff0c;windows和linux应该区别不大。 1. 安装服务器 1.安装ste…

计算机组成原理 指令流水线

文章目录 指令流水线指令流水线的概念流水线性能分析流水线的吞吐率流水线的加速比流水线的效率 影响流水线的因素结构相关 (资源冲突)数据相关 (数据冲突)控制相关 (控制冲突) 流水线分类超量流水线 指令流水线 #mermaid-svg-sWaRASMFAvh8sLJk {font-family:"trebuchet m…

[小程序]页面事件

一、下拉刷新 1.开启和配置 小程序中开启下拉刷新的方式有两种&#xff1a; ①全局开启下来刷新 在app.json的window节点中&#xff0c;设置enablePullDownRefresh设为ture。 ②局部开启下来刷新 在页面对应的json文件的的window节点中&#xff0c;设置enablePullDownRefresh设…