存储的本质-学习笔记

news2024/11/25 15:20:11

1 经典案例

1.1 数据的流动

        一条用户注册数据流动到后端服务器,持久化保存到数据库中。

1.2 数据的持久化

  1. 校验数据的合法性
  2. 修改内存
  3. 写入存储介质

2 存储&数据库简介

2.1 存储系统特点

        性能敏感、容易受硬件影响、存储系统代码既“简单”又“复杂”。

2.2 数据怎么从应用到存储介质

        缓存贯穿了整个存储体系。要尽量减少拷贝。

2.3 RAID技术

 

2.2 数据库

2.2.1 概览

        关系=集合=有序偶对

        关系代数=对关系作运算的抽象查询语言

        SQL=方便人类阅读的关系代数表达式

2.2.2 关系型数据库特点

  • 结构化数据友好
  • 支持事务(ACID)
  • 支持复杂查询语言

2.2.3 非关系型数据库特点

  • 半结构化数据友好
  • 可能支持事务
  • 可能支持复杂查询语言

3 主流产品剖析

3.1 单机存储

3.1.1 概览

        单机存储=单个计算机节点上的存储软件系统,一般不涉及网络交互

3.1.2 本地文件系统

  • Linux经典哲学:一切皆文件
  • 文件系统的管理单元∶文件
  • 文件系统接口︰文件系统繁多,如Ext2/3/4,sysfs,rootfs等,但都遵循VFS的统一抽象接口
  • Linux文件系统的两大数据结构:Index Node & Directory Entry
  • Index Node:记录文件元数据,如id、大小、权限、磁盘位置等inode是一个文件的唯一标识,会被存储到磁盘上inode的总数在格式化文件系统时就固定了
  • Directory Entry:记录文件名、inode指针,层级关系(parent)等,dentry是内存结构,与inode的关系是N:1(hardlink的实现)

3.1.3 key-value存储

  • 常见使用方式: put(k, v)& get(k)
  • 常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能
  • 拳头产品︰RocksDB

3.2 分布式存储

3.2.1 概览

        分布式存储=在单机存储基础上实现了分布式协议,涉及大量网络交互

3.2.2 HDFS

        堪称大数据时代的基石

        核心特点:

  • 支持海量数据存储
  • 高容错性
  • 弱POSIX语义
  • 使用普通x86服务器,性价比高

3.2.3 Ceph

        开源分布式存储系统里的万金油

        核心特点:

  • 一套系统支持对象接口、块接口、文件接口,但是一切皆对象
  • 数据写入采用主备复制模型
  • 数据分布模型采用CRUSH算法

 

3.3 单机关系型数据库

        商业产品Oracle称王,开源产品MySQL & PostgreSQL称霸
关系型数据库的通用组件:
Query Engine ——负责解析query,生成查询计划
Txn Manager ——负责事务并发管理
Lock Manager ——负责锁相关的策略
Storage Engine ——负责组织内存/磁盘数据结构

Replication——负责主备同步

关键内存数据结构:B-Tree、B+-Tree、LRU List等

关键磁盘数据结构:WriteAheadLog (RedoLog) . Page

 

3.4 单机非关系型数据库

        MongoDB、Redis、Elasticsearch三足鼎立

  • 关系型数据库一般直接使用SQL交互,而非关系型数据库交互方式各不相同
  • 非关系型数据库的数据结构千奇百怪,没有关系约束后, schema相对灵活
  • 不管是否关系型数据库,大家都在尝试支持SQL(子集)和“事务”

3.4.1 Elasticsearch

  • 面向「文档」存储
  • 文档可序列化成JSON,支持嵌套
  • 存在index,index=文档的集合
  • 存储和构建索引能力依赖Lucene引擎
  • 实现了大量搜索数据结构&算法
  • 支持RESTFUL API,也支持弱SQL交互

        使用案例:

         天然能做模糊搜索,还能自动算出关联程度

3.4.2 MongoDB

  • 面向「文档」存储
  • 文档可序列化成JSON/BSON,支持嵌套
  • 存在collection , collection=文档的集合
  • 存储和构建索引能力依赖wiredTiger引擎
  • 4.0后开始支持事务(多文档、跨分片多文档等)
  • 常用client/SDK交互,可通过插件转译支持弱SQL

3.4.3 Redis

  • 数据结构丰富(hash表、set、zset、list)
  • C语言实现,超高性能
  • 主要基于内存,但支持AOF/RDB持久化
  • 常用redis-cli/多语言SDK交互

3.5 分布式数据库

3.5.1 解决容量问题

改进后:

3.5.2 解决弹性问题

 

4 新技术演进

4.1 概览

  • 软件架构变更
  • AI增强
  • 新硬件革命

4.2 SPDK

 

4.3 AI&Storage

 

4.4 高性能硬件

4.4.1 RDMA网络

  • 传统的网络协议栈,需要基于多层网络协议处理数据包,存在用户态&内核态的切换,足够通用但性能不是最佳
  • RDMA是kernel bypass的流派,不经过传统的网络协议栈,可以把用户态虚拟内存映射给网卡,减少烤贝开销,减少cpu开销

4.4.2 Persistent Memory

在NVMe SSD和Main Memory间有一种全新的存储产品:Persistent Memory

  • IO时延介于SSD和Memory之间,约百纳秒量级
  • 可以用作易失性内存(memory mode),也可以用作持久化介质(app-direct)

4.4.3 可编程交换机

P4 Switch,配有编译器、计算单元、DRAM,可以在交换机层对网络包做计算逻辑。在数据库场景下,可以实现缓存―致性协议等

4.4.4 CPU/GPU/DPU

  • CPU :从multi-core走向many-core
  • GPU:强大的算力&越来越大的显存空间
  • DPU:异构计算,减轻CPU的workload

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

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

相关文章

从0到1实现单机记账APP原理与细节uniApp内含源码 (二)

单机记账APP演示及源码 具体演示如下面视频所示。免费下载地址:点击进入 预览APP下载地址:http://8.142.10.182:8888/down/aWHWeGaEQE2W.apk (带宽很小所以下载速度慢) 由于资源已经通过了,页面的样式这里就不写了&am…

蓝桥杯单片机组省赛十二届第一场(关于矩阵,温度ds18b20,时间ds1302的学习,以及继电器等外设的综合利用)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、该题目如下二、使用步骤1.矩阵键盘实现2.温度传感器ds18b20的实现总结提示:以下是本篇文章正文内容,下面案例可供参考 一、该题目如下 分…

使用Containerd搭建K8s集群【v1.25】

[toc] 一、安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多集群中所有机器之间网络互通可以访问外网,需要拉取镜像禁止swap分区二、准备环境 角色IP…

重磅新品 / 酷炫展品 / 强大生态,广和通玩转 MWC Barcelona 2023

2月27日,2023世界移动通信大会(MWC Barcelona 2023)在西班牙巴塞罗那正式开幕。全球知名移动运营商、设备制造商、技术提供商、物联网企业齐聚一堂,以领先的技术、创新的场景、前瞻的洞察向全行业输送最新鲜的行业观点。作为全球领…

python的opencv操作记录13——区域生长及分水岭算法

文章目录图像区域基本算法——形态学运算腐蚀与膨胀开运算与闭运算opencv中的形态学运算距离计算——distanceTransform函数连通域连通的定义计算连通域——connectedComponents连通域实验基于区域的分割区域生长算法自定义一个最简单区域生长算法实现区域分割一般区域分割open…

解决vscode无法自动更新

一.前言 要在vscode里面安装插件,被提示版本不匹配,然后得更新,然后我发现我的'帮助'菜单栏下没有检查更新,然后我去&…

19- CNN进行Fashion-MNIST分类 (tensorflow系列) (项目十九)

项目要点 Fashion-MNIST总共有十个类别的图像。代码运行位置 CPU: cputf.config.set_visible_devices(tf.config.list_physical_devices("CPU"))fashion_mnist keras.datasets.fashion_mnist # fashion_mnist 数据导入训练数据和测试数据拆分: x_valid, x_train…

WebAPI

WebAPI知识详解day11.Web API 基本认知作用和分类什么是DOM?DOM树的概念DOM对象2.获取DOM对象通过css选择器获取dom对象通过其他方法获取dom3.设置/修改DOM元素内容方法1. document.write() 方法方法2. 对象.innerText 属性方法3. 对象.innerHTML4.设置/修改DOM元素…

【TypeScript】的上手学习指南!

目录TS简介TypeScript是什么?为什么要推荐使用TypeScript生态支持安装TypeScriptTS简介 TypeScript是什么? TypeScript官网 简介:TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。TypeScript可以在任何浏览器、任何计…

JVM之执行引擎详解

1、概述javac将.java文件编译成.class文件,然后.class文件通过类加载子系统将字节码加载到运行时数据区,这时运行时数据区中的数据是java字节码,字节码是不能直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令&#x…

Python练习题

作业1:判断一个数,是否是2的指数 2的指数 0000 0010 0000 0001 0000 0100 0000 0011 0000 1000 0000 0111 0001 0000 0000 1111 提示:所有2的指数:n&(n - 1) 0 exponent int(…

mybatisplus复习(黑马)

学习目标能够基于MyBatisPlus完成标准Dao开发能够掌握MyBatisPlus的条件查询能够掌握MyBatisPlus的字段映射与表名映射能够掌握id生成策略控制能够理解代码生成器的相关配置一、MyBatisPlus简介MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工…

Linux:进程间通信

目录 进程间通信目的 进程间通信分类 管道 System V IPC POSIX IPC 什么是管道 站在文件描述符角度-深度理解管道 管道使用 管道通信的四种情况 管道通信的特点 进程池管理 命名管道 创建一个命名管道 命名管道的打开规则 命名管道通信实例 匿名管道与命名管道的…

C语言实现三子棋【详解+全部源码】

大家好,我是你们熟悉的恒川 今天我们用C语言来实现三子棋 实现的过程很难,但我们一定要不放弃 三子棋1. 配置运行环境2. 三子棋游戏的初步实现2.1 建立三子棋分布模块2.2 创建一个名为board的二维数组并进行初始化2.3 搭建棋盘3. 接下来该讨论的事情3.1 …

【微信小程序】-- 网络数据请求(十九)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

Jmeter接口测试教程之【参数化技巧总结】,总有一个是你不知道的

目录:导读 一、随机值 二、随机字符串 三、时间戳 四、唯一字符串UUID 说起接口测试,相信大家在工作中用的最多的还是Jmeter。 大家看这个目录就知道jmeter的应用有多广泛了:https://www.bilibili.com/video/BV1e44y1X78S/? JMeter是一个…

C#:Krypton控件使用方法详解(第十一讲) ——kryptonScrollBar

今天介绍的Krypton控件中的kryptonScrollBar。下面介绍这个控件的外观属性:BackColor属性:表示控件的背景色,属性值如下图所示:BackgroundImage属性:表示用于该控件的背景图像,属性值可以为本地导入图片。B…

final修饰符使用中遇到的一些问题

文章目录final修饰符1. final不能用来修饰构造方法2. final修饰变量的一些注意问题2.1 final修饰成员变量2.2 final修饰引用类型2.2.1 演示代码中lombok链式编程介绍final修饰符 final具有“不可改变”的含义,它可以修饰非抽象类、非抽象成员方法和变量。 用final…

day3 动态的web 开发一个带有Servlet(Java小程序)的webapp

文章目录对于一个动态的web应用来说,一个请求和响应的过程有多少个角色参与,角色和角色之间有多少个协议开发一个带有Servlet(Java小程序)的webapp(重点)对于一个动态的web应用来说,一个请求和响…

【算法经典题集】二分(持续更新~~~)

😽PREFACE🎁欢迎各位→点赞👍 收藏⭐ 评论📝📢系列专栏:算法经典题集🔊本专栏涉及到的知识点或者题目是算法专栏的补充与应用💪种一棵树最好是十年前其次是现在二分整数二分机器人…