人工智能大模型加速数据库存储模型发展 行列混合存储下的破局

在这里插入图片描述

数据存储模型

专栏内容

  • postgresql内核源码分析
  • 手写数据库toadb
  • 并发编程
  • toadb开源库

个人主页:我的主页
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

概述

在数据库的发展过程中,关系型数据库是一个里程碑式的阶段,现在关系型数据仍然占据着重要地位。
在关系型数据中,每张表都是一个关系,每行数据就是关系的一条记录,在存储时每行数据存储在连续的位置,行与行也是连续存放;
这样方便一次能拿到一整条记录。

处理业务类型

随着互联网的兴起,存储容量的提升和计算能力的飞越,我们的生活中不断增加了越来越多的被智能设备,产生了无尽的信息。
这样的信息规模已经超越了某一单体的能力限制,它们被不断分类,对于数据库处理模型,常常分为:

  • 在线事务处理模型(OLTP), 主要以事务一致性,关系型数据为主;
  • 在线分析处理模型(OLAP), 主要以分析统计为主,更多的是从大量数据中提取某几个维度的数据;

但是这样的划分,还远远不能满足信息爆炸带来的需求,它不是非黑即白的界线明晰的分类,还有大量同时存在OLTP和OLAP的特点的数据和业务,此时就需要一种混合性数据库存储模型。

数据存储模型原理

是什么

通过SQL插入的数据,在数据库中实际也是要存到磁盘上的,此时还要考虑我们写入的效率,读取的效率,如何产生的IO次数更少,那以什么格式组织这些数据,才能达到这样的目标呢?

我们使用的文件系统,都是以块为单位进行读写物理存储设备,常用的块大小有2k, 4k等;那么数据库为了提升性能,也选择以块为单位来组织数据,每次按块进行读写数据文件。
每个数据块内又分为:块头信息域,数据域的起始偏移,数据域,在数据域中按逻辑表的行进行连续存储。

当然行数据,又分为定长或变长两种不同的组织方式;定长,就是每种数据类型固定了长度,这样一行数据的长度也是确定的;变长类型,就是像字符,文本等长度是可变的,那么存储时需要记录长度。
它们最大的区别在于更新时,定长是可以直接覆盖更新的,而变长就需要追加更新。

为什么存储模型这么重要

因为我们的存储到数据库中的数据都是持久化到磁盘中,当我们查询时,再从磁盘中读出,
虽然我们数据库和操作系统层面都已经做了缓存,当数据量大时还是会产生大量的磁盘IO,而且数据库大多数情况下都是随机访问,缓存并不保证全部命中。

相较与内存速度来讲,磁盘速度是极底的,但是内存往往是有限的,所以存储模型至关重要,通过将随机写转换为顺序写,少的IO就可以精确找到数据,减少遍历,这些都可以做到减少IO次数,提升性能。

数据存储模型类型

NSM模型

故名思义,就是按行数据排列的数组形式, 数据的物理结构和他们的逻辑结构是一样的,也就是我们常说的行存储模型,这也是大多数关系型数据库采用的存储模型。

物理存储结构

磁盘是由一个一个数据块组成的,因此连续的数据也分在了连续的数据块。
每个数据块中又分块头信息,记录块中数据的起始偏移,每行数据分为 行的数据偏移item,从块头后面连续存储, 以及真正的行数据,它从块的末尾开始向头部方向连续存储,这是为了方便空闲空间的管理。

表数据与物理存储结构对应 如下图所示 :

物理存储结构

应用场景

  • 它的优势在于对关联数据的查询非常快,比如根据身份证号就可以一次读出姓名,住址等一系列信息。
    在此基础上对于复杂的嵌套join就非常有优势,因为它的各列数据都在一起。

不适合场景

  • 对于只查找部分列属性数据的业务,就会增加IO的成本,它需要全行数据的读出。对于按3NF设计,还是一张大宽表,都避免不了缓存效率的降低。

DSM模型

分解的存储模型,也就是将一行中的各字段存储到不同的数据单元中,当需要某列数据时,只从磁盘加载部分数据,如果需要整行数据,那就加载全量数据,然后进行行组装。

可以是每一列都分别存储,也可以根据业务需要不规则的划分,比如有三列经常会相时查询,那这三列可以一起存储,剩余的列分别存储。

物理存储结构

常见的格式有:

  • PAX
  • RCFile(record columnar file)
  • Apache ORC
  • Parquet (An Open Columnar Storage for Hadoop)

它们中更多偏向分析型列式存储,可以处理大量的时序,流式数据,也有一些偏向于行列的混合型,每种格式都有成熟的产品应用。

应用场景

它们的场景更多偏向分析型,如hdoop系列的,使用ORC, Parquet。

混合型数据存储模型

为了综合以上NSM和DSM各自的优势,互补长短,目前一些数据库已经采用了一些混合的存储模型。

常见混合模型实践

  • 数据冗余型

在存储数据时,干脆两种格式同时进行存储,一种按行进行存储,一种按列分别存储,这样避免了转换带的复杂度,用空间来换取性能;在优化引擎中可以选择更适合的路径;

  • 数据转换型

因为行存必须带来IO的放大,也以实际存储采用列式存储,在使用时进行组装成逻辑行数据;这种模型的难点在于,如何准确的找到逻辑行中的各字段,大多都采用PAX中提到的分组的方式。

难点

在大数据处理中,已经不局限于关系型数据,更多的是非关系型,如文本,json数据,如何将它们转换成列数据,可以快速查找,这将是混合型存储模型面临的一项挑战。

最近兴起的向量数据量,向量与大模型维度是对应的,底层数据库存储就需要将各类型数据进行分别存储。

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!

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

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

相关文章

系统架构设计专业技能 · 软件工程之需求工程

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

Qt快速学习(一)--对象,信号和槽

目录 1.Qt概述 1.1 什么是Qt 2.2 手动创建 2.3 pro文件 2.4 一个最简单的Qt应用程序 3 第一个Qt小程序 3.1 按钮的创建 3.2 对象模型(对象树) 3.3 Qt窗口坐标体系 4 信号和槽机制 4.1 系统自带的信号和槽 4.2 自定义信号和槽 4.3信号槽的拓展 4…

Edge浏览器免费使用GPT3.5

搜索sider,安装Sidebar插件 注册账号即可每天免费使用30次。 Sider: ChatGPT侧边栏,GPT-4, 联网, 绘图

C++ 的关键字(保留字)完整介绍

1. asm asm (指令字符串):允许在 C 程序中嵌入汇编代码。 2. auto auto(自动,automatic)是存储类型标识符,表明变量"自动"具有本地范围,块范围的变量声明(如for循环体内的变量声明…

机器学习深度学习——NLP实战(情感分析模型——RNN实现)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——NLP实战(情感分析模型——数据集) 📚订阅专栏:机器学习&…

re学习(34)攻防世界-csaw2013reversing2(修改汇编顺序)

参考文章: re学习笔记(27)攻防世界-re-csaw2013reversing2_Forgo7ten的博客-CSDN博客攻防世界逆向入门题之csaw2013reversing2_沐一 林的博客-CSDN博客 三种做法 1、ida静态分析修改指令 main函数反编译的代码 由于运行之后的是乱码&…

[oneAPI] 手写数字识别-BiLSTM

[oneAPI] 手写数字识别-BiLSTM 手写数字识别参数与包加载数据模型训练过程结果 oneAPI 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToo…

python rtsp 硬件解码 二

上次使用了python的opencv模块 述说了使用PyNvCodec 模块,这个模块本身并没有rtsp的读写,那么读写rtsp是可以使用很多方法的,我们为了输出到pytorch直接使用AI程序,简化rtsp 输入,可以直接使用ffmpeg的子进程 方法一 …

STM8遇坑[EEPROM读取debug不正常release正常][ STVP下载成功单运行不成功][定时器消抖莫名其妙的跑不通流程]

EEPROM读取debug不正常release正常 这个超级无语,研究和半天,突然发现调到release就正常了,表现为写入看起来正常读取不正常,这个无语了,不想研究了 STVP下载不能够成功运行 本文摘录于:https://blog.csdn.net/qlexcel/article/details/71270780只是做学习备份之…

GEEMAP 中如何拉伸图像

图像拉伸是最基础的图像增强显示处理方法,主要用来改善图像显示的对比度,地物提取流程中往往首先要对图像进行拉伸处理。图像拉伸主要有三种方式:线性拉伸、直方图均衡化拉伸和直方图归一化拉伸。 GEE 中使用 .sldStyle() 的方法来进行图像的…

8.5.tensorRT高级(3)封装系列-基于生产者消费者实现的yolov5封装

目录 前言1. yolov5封装总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习 tensorRT 高级-基于生产者消费者实现的yolov5封装…

postgresql中基础sql查询

postgresql中基础sql查询 创建表插入数据创建索引删除表postgresql命令速查简单查询计算查询结果 利用查询条件过滤数据模糊查询 创建表 -- 部门信息表 CREATE TABLE departments( department_id INTEGER NOT NULL -- 部门编号,主键, department_name CHARACTE…

CentOS6.8图形界面安装Oracle11.2.0.1.0

Oracle11下载地址 https://edelivery.oracle.com/osdc/faces/SoftwareDelivery 一、环境 CentOS release 6.8 (Final),测试环境:内存2G,硬盘20G,SWAP空间4G Oracle版本:Release 11.2.0.1.0 安装包:V175…

Lookup Singularity

1. 引言 Lookup Singularity概念 由Barry WhiteHat在2022年11月在zkResearch论坛 Lookup Singularity中首次提出: 其主要目的是:让SNARK前端生成仅需做lookup的电路。Barry预测这样有很多好处,特别是对于可审计性 以及 形式化验证&#xff…

【学习FreeRTOS】第8章——FreeRTOS列表和列表项

1.列表和列表项的简介 列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。列表项就是存放在列表中的项目。 列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表列表的…

微软Win11 Dev预览版Build23526发布

近日,微软Win11 Dev预览版Build23526发布,修复了不少问题。牛比如斯Microsoft,也有这么多bug,所以你写再多bug也不作为奇啊。 主要更新问题 [开始菜单] 修复了在高对比度主题下,打开开始菜单中的“所有应…

Spring Boot通过企业邮箱发件被Gmail退回的解决方法

这两天给我们开发的Chrome插件:Youtube中文配音 增加了账户注册和登录功能,其中有一步是邮箱验证,所以这边会在Spring Boot后台给用户的邮箱发个验证信息。如何发邮件在之前的文章教程里就有,这里就不说了,着重说说这两…

通过 kk 创建 k8s 集群和 kubesphere

官方文档:多节点安装 确保从正确的区域下载 KubeKey export KKZONEcn下载 KubeKey curl -sfL https://get-kk.kubesphere.io | VERSIONv3.0.7 sh -为 kk 添加可执行权限: chmod x kk创建 config 文件 KubeSphere 版本:v3.3 支持的 Kuber…

Linux 安全技术和防火墙

目录 1 安全技术 2 防火墙 2.1 防火墙的分类 2.1.1 包过滤防火墙 2.1.2 应用层防火墙 3 Linux 防火墙的基本认识 3.1 iptables & netfilter 3.2 四表五链 4 iptables 4.2 数据包的常见控制类型 4.3 实际操作 4.3.1 加新的防火墙规则 4.3.2 查看规则表 4.3.…

企事业数字培训及知识库平台

前言 随着信息化的进一步推进,目前各行各业都在进行数字化转型,本人从事过医疗、政务等系统的研发,和客户深入交流过日常办公中“知识”的重要性,再加上现在倡导的互联互通、数据安全、无纸化办公等概念,所以无论是企业…