CMU15-445 数据库导论 Storage02 其他存储方式

CMU15-445 数据库导论 Storage02 其他存储方式

1. 参考资料:

[1] CMU15-445:Database Systems [Andy Pavlo] https://15445.courses.cs.cmu.edu/fall2022

[2] DataBase System Concept[M].Abraham Silberschatz,Henry F. Korth,S. Sudarshan

[3] Simviso精选视频课程.知秋译:https://www.simtoco.com/#/albums?id=1000013

[4] 课件链接: 链接: 链接: https://pan.baidu.com/s/1UW3HjCDv0OduahOyx2FCyA?pwd=ws4u 提取码: ws4u

2.概述

本接主要讲述了除了常规的Page/行Tuple的其他数据存储组织的形式,和数据库的工作负载。

主要有以下几点:

  • 面向日志的数据库存储形式(oriented-log);
  • 不同类型的数据在磁盘上的组织形式,以及遇到的问题;
  • 大数据的存储方案
  • 数据库负载的两种形式OLTP 和 OLAP;
  • 不同类型的业务特点和对应更合适的存储方法;
  • 列存

3.数据表现

3.1 针对浮点数的存储

​ 实际上大部分的数据类型数据库中的数据都是以C/C++的原生形式进行编码存储;

非原生存储的数据类型:浮点数

​ C/C++的浮点数实际是一种不定长数据,可以根据需求进行格式化存储和显示,当把这类不定长数据存储进数据库时,会造成系统业务数据和数据库数据的不匹配,当对数字要求较高时会出现问题;

​ 数据库设计上,针对此类数据需要进行特殊处理,具体的方案是构造一类结构体,如DECIMAL or REAL(类似Java中的类,BIGDECIMAL),将一个不定长的数字,根据其需求取定长存入数据库。

CMU15-445  数据库导论 Storage02 其他存储方式

3.2 针对时间的存储

​ 对于时间,采取的是单位+时间戳的方式共同构造进行存储;

3.3 针对大文件的存储

​ 当用户想把一个大的value存入数据时,这个数据可能会把整个Page占满(如一个视频),此时往往会采取overflow的方式来进行存储,即存储一个指向大value的指针,另外开辟一片空间对其进行存储。

CMU15-445  数据库导论 Storage02 其他存储方式

​ 同样,对于连续的大文件进行管理的话,同样存在一种组织方式,即不把数据存在数据库内,可以存在可以调用到的网络空间上,仅仅在数据库内进行连接的存储。

CMU15-445  数据库导论 Storage02 其他存储方式

3.4 系统目录(System Catalog)

​ 数据库需要专门设计一个区域,用来存储库,表,表子段等meta数据;

​ 在数据库标准中Information_shchema这个库要求存放这些数据

4. 面向日志的数据库(Log-Structured File Organization)

​ 和Page组织的面向disk存储的形式不同,log-oriented日志,每次存储的是对数据库的操作。如果需要读一条数据的value,需要在日志中进行查找,再把相关日志聚合得到最终数据。

CMU15-445  数据库导论 Storage02 其他存储方式

这样存储的优势:

​ 将非顺序写入数据库的行为变成顺序写入,可以告诉写入;

劣势:(设计者需要注意的地方)

  • 需要大量空间来存储日志;
  • 需要定期进行压缩处理数据
  • 数据在读时,效率较低;

5.数据库工作负载(WorkLoad)

​ 数据库的工作负载即数据库的主要工作业务,可以分为两类:

​ 1.在线事务进程 OLTP(On-Line Transaction Processing);

​ 2.在线分析进程 OLAP(On-Line Anatical Processing)

5.1 OLTP

​ OLTP往往是那种短平快的简单查询语句,有较少的查询语句构成一个事务,这个事务仅仅需要修改较少的tuple。但是往往是高并发的,经常是多进行快速读写。线上交易就是一个典型的OLTP;

​ 该类事务的特点,实际是更适合by行去查询的,因为涉及较少的tuple,但是往往需要全部的相关信息;

5.2 OLAP

​ 分析性事务,需要数据库大量对数据进行查询,然后对查询到的数据进行聚合分析,然后结果展示。本类的事务往往需要读大量的数据的某个字段,然后对其趋势和数据特点进行分析。这对数据库的要求就是大量数据查询能力;

5.3 Hybrid Transaction

​ 混合型事务,即将上述两种结合的数据库负载类型,但是目前似乎没有一个典范型解决方案。笔者之前的工作经历中,对于OLTP的业务实际是云数据库集群进行支持,当T天的数据结果产出后,T+1日的凌晨往往会把当天的数据进行同步至离线表,进行OLAP的业务支持,在OLAP中将分区进行索引,来存储每天的数据。

6. Storage Models

​ 如上文所述,数据库的两种业务实际有着适合各自的存储方案;

6.1 N-Ary Storage Model(NSM)

​ 行存(row storage),在行存的模式下,Page中将连续存储一个Tuple的所有属性(attribute)。这实际上就是针对OLTP衍生的一种解决方案,正好对应量其特点,需要完整快速的处理较少的事务。

优势:

1.快速的增删改;

2.更好的完全查询小规模tuple;

劣势:

​ 当需要大规模的扫描表时,获取某个属性的聚合分析值时,需要先把其他无用属性也一并拿出来,影响性能;

CMU15-445  数据库导论 Storage02 其他存储方式

6.2 Decompositiom Storage Model(DSM)

​ 分解式存储,将一个tuple的不同属性进行分解,然后将属性进行合并存储。仅需要保持一个tuple在这些相关联的Page中处于一个偏移量即可。

​ 这样如果需要针对某属性进行大规模扫描时,我们能很快获取需要的数据。

优势:

​ 1.减少大批量查询时的浪费,可以直接获取需要的目标属性;

​ 2.由于相同的数据都连续存储,更易于压缩

劣势:

​ 查询单tuple时效率低;

CMU15-445  数据库导论 Storage02 其他存储方式

Original: https://www.cnblogs.com/Albert-lihai/p/16670897.html
Author: Albert_禄遥
Title: CMU15-445 数据库导论 Storage02 其他存储方式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577704/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [ Shell ] 用 while + case 实现 GetOptions 效果

    https://www.cnblogs.com/yeungchie/ 可以用 getopt,但我还是喜欢自己写这个过程,便于我控制更多细节。 下面要实现的效果是,从命令行参数中分析…

    Linux 2023年6月7日
    0114
  • phpcms安装

    【快速安装开始】 下载解压phpcms,复制安装文件到站点目录”/opt/html”里,给予权限(官网无法访问了,所以下载地址需自行寻找上传) cd /us…

    Linux 2023年6月6日
    083
  • DHCP服务

    一、dhcp介绍 dhcp 应用层协议 动态主机配置协议 作用: 为主机动态分配tcp/ip参数(ip地址、掩码、网关、DNS服务器地址) Linux实现dhcp服务 软件: dh…

    Linux 2023年6月7日
    091
  • Timeout connecting to [localhost/127.0.0.1:9200]

    空服务启动时(或者压根没引入es相关jar包)报Timeout connecting to [localhost/127.0.0.1:9200]错误时,查看pom.xml中是否引用…

    Linux 2023年6月7日
    0158
  • BKT的胡测题解:第一套第一题parts

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/Grharris/p/11530239.htmlAuth…

    Linux 2023年6月6日
    0102
  • 笔记:Java集合框架(一)

    Java集合框架(一) Collection接口 继承结构 Iterator接口 Iterator接口定义了迭代器的基本方法: java;gutter:true; hasNext(…

    Linux 2023年6月14日
    084
  • Spring事务管理

    事务的特性:一致性、原子性、隔离性、持久性 Spring事务管理相关接口:PlatformTransactionManager(事务管理器)、TransactionDefiniti…

    Linux 2023年6月7日
    0116
  • 解决word插入新图片后原有图片题注的交叉引用错乱的问题

    引言 在日常工作和生活中,我们经常使用word来撰写文档、论文。为了更好地管理文档中的图片以及在正文中引用图片标题,需要借助题注来实现。通过题注,可以在正文中交叉引用图片,并为引用…

    Linux 2023年6月7日
    0149
  • 让SpringBoot也用上Fluent Validator

    前言 在使用SpringBoot的时候经常需要对客户端传入的参数进行合法性的校验,校验的方法基本上都是使用SpringBoot提供的注解,有时候遇上注解不能满足需求的时候还需要在业…

    Linux 2023年6月14日
    0100
  • 散列数据结构以及在HashMap中的应用

    1. 为什么需要散列表? 对于线性表和链表而言,访问表中的元素,时间复杂度均为O(n)。即便是通过树结构存储数据,时间复杂度也为O(logn)。那么有没有一种方式可以将这个时间复杂…

    Linux 2023年6月7日
    0141
  • 常用命令记录

    npm仓库查看和修改 npm config set registry https://registry.npm.taobao.org #设置使用淘宝提供的npm仓库 npm con…

    Linux 2023年5月27日
    087
  • CentOS——Redis消息订阅发布

    作用: 发布订阅类似于信息管道,用来进行系统之间消息解耦。类似于mq,rebbitmq,rocketmq,kafka,activemq 主要有消息发布者和消息订阅者。 比如:订单支…

    Linux 2023年5月28日
    0111
  • 001.IT运维面试问题-Linux基础

    Redhat、CentOS、Fedora、SuSE、Debian、Ubuntu、FreeBSD等。 ⑴开机BIOS自检,加载硬盘。 ⑵读取MBR,MBR引导。 ⑶grub引导菜单(…

    Linux 2023年6月13日
    0110
  • Twikoo私有化部署教程–迁移腾讯云

    备份数据 私有化部署 创建容器 导入数据 重新配置twikoo面板设置 引入前端CDN Nginx https反代http 作者:小牛呼噜噜 | https://xiaoniuhu…

    Linux 2023年6月6日
    0152
  • redis

    常用操作 LLEN KEY_NAME # 返回列表的&#x95…

    Linux 2023年5月28日
    0106
  • 最新超详细的VMware虚拟机的下载与安装

    一、了解VMware VMware虚拟机软件是一个”虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与&#8…

    Linux 2023年6月15日
    0143
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球