数据库存储

news2024/9/21 20:52:37

RAID

  • DSL : Domain Spesic Language 专用领域语言
    在这里插入图片描述

单机存储

  • 一切皆Key-Value

本地文件系统

  • 一切皆文件
    在这里插入图片描述

在这里插入图片描述

Ceph - 分布式存储

在这里插入图片描述

关系型数据库通用组件

  • Query Engine :解析query,生成查询计划
  • Txn Manager :事务并发管理
  • Lock Manager :锁相关的策略
  • Storage Manager :组织内存 / 磁盘数据结构
  • Replication :主从同步
  • 内存结构: B-Tree 、B±Tree 、LRU List
  • 磁盘数据结构:WriteAheadLog(ReadLog)、Page

在这里插入图片描述

分布式存储之容量问题

在这里插入图片描述

分布式存储之弹性问题

在这里插入图片描述

  • 性价比优化:

在这里插入图片描述

SQL

一条SQL的一生:

在这里插入图片描述

  1. 查询解析 : 将文本解析成结构化数据,即AST
  2. 查询优化: 优化器,根据AST生成最优的执行计划
  3. 查询执行
  4. 事务引擎:处理事务ACID
  5. 存储引擎:内存中的数据缓存文件、日志文件等

SQL引擎 – 规则引擎

词法分析 -> 语法分析 -> 语义分析

在这里插入图片描述

Optimizer

在这里插入图片描述

条件化简 & 表连接优化 & Scan优化

在这里插入图片描述

代价优化

在这里插入图片描述

火山引擎

在这里插入图片描述

梯次链式调用:解耦

一层一层的解析计数,计数返回递归返回
每个算子独立计算,相互之间没有耦合,逻辑结构简单
每一条数据要调用多个函数,CPU开销很大

  • 把Row优化成Batch, 批量计算

  • 把执行函数封装到一个函数里面

InnoDB

在这里插入图片描述

  • mysql中每个chunk的大小一般为128M,每个block对应一个page,一个chunk下面有8192个block

  • 避免内存碎片化

  • 分成多个instance,可以有效避免并发冲突

  • hash: page id % instance num 得到它属于哪个instance

  • 通过page id 去找 block
    在这里插入图片描述

LRU算法:把最近最常用的数据保留下来

  • 缺陷:
    扫描100G的表,而我们的buffer pool只有1G,因为扫描全表的数据量大,需要淘汰的缓存页多,导致在淘汰过程中,很有可能把需要的缓存页给淘汰了,新数据是低频的

  • 解决:冷热分离

    • LRU链表分为两部分,一部分冷数据(刚从磁盘读进来的数据),一部分热数据(经常访问的数据)。
    • 从磁盘读取的数据先放到冷数据表的头部,如果它1s后被访问,此页数据移动到热数据表的头部;否则不动
    • 淘汰时,先淘汰冷数据区

Page

  • 一个page大概16Kb左右

在这里插入图片描述

B+树索引

在这里插入图片描述

数据库的回滚 - Undo

在这里插入图片描述

  • undo是逻辑日志,记录的是数据的增量变化,保证事务的原子性和事务并发控制。

    • 可以适用于多版本控制MVCC,解决读写冲突和一致性的问题
  • MVCC的作用:

    • 读写互不阻塞
    • 降低死锁概率
    • 实现一致性读
  • Undo Log 在MVCC的作用

    • 每个事务有一个单增的事务ID
    • DB_ROLL_PTR 将数据行的所有快照记录通过链表的结构串联起来

Sharding - 分库分表

  • 解决大流量问题
  • 业务层进行水平拆分(Hash拆分)
    在这里插入图片描述

流量突增 - 扩容

流量突增 - 代理池

  • 连接太多了,Proxy就相当于连接的缓存
    在这里插入图片描述

高可用 & 稳定性

在这里插入图片描述

  • Binlog :是mysql用来记录数据结构变更以及表数据修改的二进制日志,只会记录了表的变更操作,但是不会记录select和show这种查询操作
  • 数据恢复: 误删数据之后可以勇敢binilog来恢复数据
  • 主从复制:主库把binlog传给从库,读取binlog然后写数据,就能保证数据一致性
  • 审计:对二进制日志进行分析,判断是否对数据库进行注入功击

列式存储

数据存储要考虑一下问题:

并发处理
建立索引表
行存、列存、行列混合

数据查询:

读多写少
读少写多
分析型查询
点查模式

数据压缩

LZ4: 压缩重复项

  • 向前5个,重复4项
    在这里插入图片描述

Run-length encoding:

  • 重复数据直接压缩
    在这里插入图片描述
    差值encoding:
    在这里插入图片描述

延迟物化

将列数据转换为可以被计算或者输出的行数据或者内存数据结果的过程,物化后的数据通常可以被用来做数据过滤

  • 推迟物化的发生
  • 直接在压缩列上做计算

向量化

SIMD:现代化多核CPU,一条指令执行多条数据(批处理)

用SIMD指令完成的代码设计和执行的逻辑就叫做向量化

在这里插入图片描述

索引表

  • B tree :数据写入有序,叶子左小右大
  • B + tree: 叶子节点索引维护,key二分查找
  • LSM-tree: Log structrual tree 大吞吐量写入场景的数据结构

SSTable

  1. key顺序存储,成为segment
  2. 单表多个segement
  3. segemnt写入磁盘不可更改,新加的数据只能生成新segement
    在这里插入图片描述

Mentable

  • 在内存中的数据保存在memtable中,大多数实现都是一颗Binary search tree
  • 当memtable存储的数据到达一定的阈值的时候,就会按顺序写入到磁盘

在这里插入图片描述

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

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

相关文章

知识汇总:Python办公自动化应该学习哪些内容

当前python自动化越来越受到欢迎,python一度成为了加班族的福音。还有大部分人想利用python自动化来简化工作,不知道从何处下手,所以,这里整理了一下python自动化过程中的各种办公场景以及需要用到的python知识点。 Excel办公自动…

【C++】类和对象(第二篇)

文章目录1. 类的6个默认成员函数2. 构造函数2.1 构造函数的引出2.2 构造函数的特性3. 析构函数3.1 析构函数的引出3.2 析构函数的特性4. 拷贝构造函数4.1 概念4.2 特性5.赋值运算符重载5.1 运算符重载概念注意练习5.2 赋值重载实现赋值重载的特性6. const成员函数7. 取地址及co…

传统图机器学习的特征工程

视频资料同济子豪兄中文精讲视频:节点特征工程:https://www.bilibili.com/video/BV1HK411175s连接特征工程:https://www.bilibili.com/video/BV1r3411m7sD全图特征工程:https://www.bilibili.com/video/BV14W4y1V7gg斯坦福原版视频…

spring的事物控制

1.调用这个方法的对象是否是spring的代理对象($CGLIB结尾的) 2.这个方法是否是加了Transactional注释 都符合才可以被事物控制 如果调用方法的对象没有被事物控制,那么被调用的方法即便是加了Transactional也是没用的 一个非事务方法调同类…

13.hadoop系列之MapReduce排序实践

本文我们学习MapReduce的全排序、二次排序以及区内排序 1.MapReduce概述 MapTask和ReduceTask均会对数据按照key进行排序。该操作属于hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要默认排序是按照字典顺序排序,通过快速排序…

【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式国赛程序设计试题以及详细题解

文章目录原题展示原题分析详细题解LED模块按键模块串口LCD模块模拟电压读取(ADC)脉冲输入输出文章福利原题展示 原题分析 本届国赛试题主要包含LCD、LED、按键、EEPROM、串口、模拟电压输入、脉冲输入输出七大部分,其中前面三个部分是蓝桥杯嵌入式的“亲儿子”(必考…

SpringBoot 集成 Kafka

SpringBoot 集成 Kafka1 安装 Kafka2 创建 Topic3 Java 创建 Topic4 SpringBoot 项目4.1 pom.xml4.2 application.yml4.3 KafkaApplication.java4.4 CustomizePartitioner.java4.5 KafkaInitialConfig.java4.6 SendMessageController.java5 测试1 安装 Kafka Docker 安装 Kafk…

数据库原理及应用期末复习汇总(附某高校期末真题试卷)

文章目录《数据库原理及应用》试题1一、选择题(共35分)二、填空(每空1分,共20分)三、T-SQL综合题(共35分)四、综合应用题(共10分)《数据库原理及应用》试题2一、选择题(共35分)二、填空&#xf…

handler解析(5)常见面试题

目录 1.请大致讲下handler的工作原理 2.handler.postDelay原理 3.一个线程有几个Looper?几个Handler? 4. Handler内存泄漏原因?以及解决方案 5.为何主线程可以new Handler如果想要在子线程中new Handler要做些什么准备? 6.消息退出是调…

R语言广义可加模型在空气环境污染方面的应用(1)

粉丝私信我希望复制一篇文章的图片,图片来源于文章:Wu C, Yan Y, Chen X, Gong J, Guo Y, Zhao Y, Yang N, Dai J, Zhang F, Xiang H. Short-term exposure to ambient air pollution and type 2 diabetes mortality: A population-based time series st…

中频采样和IQ采样的比较和转换

一、什么是中频采样,什么是IQ采样 射频接收系统通常使用数字信号处理算法进行信号解调和分析,因此需要使用ADC对信号进行采样。根据采样频率的不同,可以分为射频直接采样、中频采样、IQ采样。射频采样和中频采样只需要一路ADC,采…

搜索引擎ES相关问题

一、什么是倒排索引?有什么好处?索引: 从ID到内容。倒排索引: 从内容到ID。好处: 比较适合做关键字检索。 可以控制数据的总量。提高查询效率。搜索引擎为什么比MySQL查询快? lucence文章 -》 term ->排…

element-ui中el-table点击其他自定义按钮展开table中某一行

element-ui中el-table点击其他自定义按钮展开table中某一行 在日常开发中,我们遇见了会有点击某些按钮,使得表格行展开的需求,这时候去查看文档 element-ui(table) 这里官方提供了示例为在行最左侧有一个展开合并ico…

JAVA开发测试(jmeter如何测试性能与估算)

对C的业务网站或应用,进行性能测试来评估使用服务器情况是必不可少的一项工作。 一、测试工具: Apache JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能,是Apache组织开发的…

CCF-CSP真题《202212-1 现值计算》思路+python满分题解

想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号:202212-1试题名称:现值计算时间限制:1.0s内存限制:512.0MB问题描述: 问题描述 评估一个长期项目的投资收益,资金的…

中点BH算法对任意斜率的直线扫描转换方法

作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、算法原理二、…

六“元”数智增长模型,企业元宇宙时代的经营新范式

摘要:在中国传统哲学里,“元”表示最基本的、最根本的东西;在企业管理经营中,将“元”解释为企业的核心竞争力或者基础能力;元宇宙下,“元”就代表数智化下的新场景,来支撑企业的各种业务创新。 一、元宇宙下的“元” …

分享IDEA通过插件 【一键自动生成】 在线api接口文档

开发写代码已经很辛苦,相信每个开发人员都不想写接口文档,但是不写又不行。尤其现在开发的项目偏向于前后端分离,在没有接口的情况下,前后端很难对接联调,测试也无法很好的测试。现在IDEA的插件仓库里有款插件&#xf…

qt 内存泄漏处理办法

windows 版本windows msvc版本可以使用vld检测可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;可以得到泄露内存的完整数据;可以设置内存泄露报告的级别。缺点:1.只针对 Visual C &#xff08…

VUE -- defineExpose

defineExpose定义demo定义 defineExpose定义:用于组件通信中父级组件调用操作子组建方法和响应式属性参数能力 在使用definExpose前需要了解两个拷贝对象函数 对象copy:shallowReactive 与 数据 copy:shallowRef 这两个都是vue包里面的 简…