当前位置: 首页 > news >正文

存储的本质-学习笔记

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

相关文章:

存储的本质-学习笔记

1 经典案例 1.1 数据的流动 一条用户注册数据流动到后端服务器,持久化保存到数据库中。 1.2 数据的持久化 校验数据的合法性修改内存写入存储介质2 存储&数据库简介 2.1 存储系统特点 性能敏感、容易受硬件影响、存储系统代码既“简单”又“复杂”。 2.2 数…...

新一代骨传导机皇重磅发布:南卡Neo骨传导运动耳机,性能全面提升

近日,中国最强骨传导品牌NANK南卡发布了最新一代骨传导耳机——南卡Neo骨传导耳机!该款耳机与运动专业性更强的南卡runner Pro4略微不同,其主要定位于轻运动风格,所以这款耳机的音质和佩戴舒适度达到了令人咂舌的地步!…...

Hbase Schema设计与数据模型操作

一、Hbase Schema设计 1,Schema 创建 使用 Apache HBase Shell 或使用 Java API 中的 Admin 来创建或更新 HBase 模式。 Configuration config HBaseConfiguration.create(); Admin admin new Admin(conf); TableName table TableName.valueOf("myTable&…...

微电影广告有哪些传播优势?

微电影广告是在基于微电影的模式下发展而来的,是伴随着当下快节奏、碎片化的生活方式而诞生的新兴广告表现形式。微电影广告凭借其具备的独特传播优势以及时代特征成为广大企业主塑造企业品牌形象的主要方式。那么,微电影广告究竟有哪些传播优势&#xf…...

html基础(列表(ul、ol、dl)、表格table、表单(input、button、label)、div和span、空格nbsp)

1无序列表<ul>和有序列表<ol>1.1无序列表<ul><!-- 无序列表 --><ul><li>吃饭</li><li>睡觉</li><li>打豆豆</li></ul>1.2有序列表<ol><!-- 有序列表 --><ol><li>吃饭</li…...

uniapp常用标签

view ~~ 视图容器类似于传统html中的div&#xff0c;用于包裹各种元素内容<view><text>hh</text> </view>scroll-view ~~可滚动视图区域scroll-x 允许横向滚动scroll-y 允许纵向滚动scroll-top 设置竖向滚动条位置&#xff0c;可以一键回到顶部refresh…...

《数字中国建设整体布局规划》发布,推进IPv6部署和应用是重点

近日&#xff0c;中共中央、国务院印发了《数字中国建设整体布局规划》&#xff08;以下简称《规划》&#xff09;&#xff0c;并发出通知&#xff0c;要求各地区各部门结合实际认真贯彻落实。 《规划》指出&#xff0c;建设数字中国是数字时代推进中国式现代化的重要引擎&…...

【Java】 异步调用实践

本文要点&#xff1a; 为什么需要异步调用CompletableFuture 基本使用RPC 异步调用HTTP 异步调用编排 CompletableFuture 提高吞吐量BIO 模型 当用户进程调用了recvfrom 这个系统调用&#xff0c;kernel 就开始了 IO 的第一个阶段&#xff1a;准备数据。对于 network io 来说…...

园区智慧能源管理系统

实现对园区的用能情况实时、全方位监测&#xff0c;重点设备进行数据自动采集并智能统计、分析&#xff0c;根据需要绘制各种趋势曲线、能源流向图和分析报表。将物联网、大数据与全过程能源管理相融合&#xff0c;提供全生命周期的数字化用能服务&#xff0c;实现用能的精细化…...

基于卷积神经网络CNN的分类研究,基于卷积神经网络的手写体识别

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络CNN手写体识别 基本结构 主要参数 MATALB代码 结果图 展望 背影 现在生活&#xff0c;各种人工智能都要求对图像拥有识别…...

mybatis的增删改查运用

目录 一、总览图 二、运用 一、总览图 代码总览图 数据库总览图 二、运用 数据库的一张表对应一个封装类&#xff0c;一个mapper接口&#xff0c;一个mapper.xml文件&#xff0c; 一个实现类。表中的增删改查都在里面编写 但是配置xml文件整个数据库只要一个就好了 1.…...

centos8安装docker运行java文件

本文由个人总结&#xff0c;如需转载使用请标明原著及原文地址 这里是基于我前一篇搭的centos8服务器做的&#xff0c;如果yum baseos源或appstream源有问题可以去看看前一篇 https://blog.csdn.net/qq_36911145/article/details/129263830 1.安装docker 1.1配置docker yum…...

Docker容器化部署.net core API

1.为API集成Docker环境。&#xff08;VS自带&#xff0c;傻瓜式操作&#xff09; 1.1 点击项目&#xff0c;右键&#xff0c;添加&#xff0c;选择Docker支持 1.2 找到项目根目录中的Dockerfile文件&#xff0c;这是VS刚刚帮我们自动生成的。进入和做如图标红地方修改。 把文…...

springcloud 服务调用feign、熔断hystrix、网关gateway

回归cloud的学习&#xff0c;对于springcloud的架构与原理以及性能的分析我们都在之前的文章里写过&#xff1a;springcloud架构的认识我们之前测试过eureka服务注册功能&#xff0c;它能很好的保存服务之间的通讯关系&#xff0c;是维系微服务通讯网之间的电话本&#xff0c;同…...

《C++ Primer》 第十二章 动态内存

《C Primer》 第十二章 动态内存 动态内存与智能指针 shared_ptr允许多个指针指向同一个对象&#xff1b;unique_ptr则“独占”所指向的对象&#xff0c;weak_ptr指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。 shared_ptr类&#xff1a;默认初始化的智能…...

多个关键字用or、and、包含、不包含动态拼接为正则表达式和SQL查询条件

目录前言校验思路1、存储方式2、实现图一实现图二实现结果最后前言 不知道大家有没有做过这种需求&#xff1a;在某字符串中&#xff0c;根据多个关键字去判断这串字符串是否满足条件。如下图&#xff1a; 亦或是 如果说要根据图二的关键字去数据库中查询符合条件的数据&a…...

初始Linux操作系统

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…...

【算法数据结构体系篇class12、13】:二叉树

一、判断二叉树是否是完全二叉树/*** 判断二叉树是否是完全二叉树** //判断层序遍历过程如果节点有右子树 没有左子树 那么就不是完全二叉树* //判断层序遍历过程如果遇到第一个节点是没有左或右子树的&#xff0c;也就是只有一个子节点或者没有&#xff0c;那么再往后层序遍历…...

数字IC手撕代码--联发科(总线访问仲裁)

题目描述当A、B两组的信号请求访问某个模块时&#xff0c;为了保证正确的访问&#xff0c;需要对这些信号进行仲裁。请用Verilog实现一个仲裁器&#xff0c;对两组请求信号进行仲后&#xff0c;要求&#xff1a;协议如图所示&#xff0c;请求方发送req&#xff08;request&…...

白盒测试复习重点

白盒测试白盒测试之逻辑覆盖法逻辑覆盖用例设计方法1.语句覆盖2.判定覆盖(分支覆盖)3.条件覆盖4.判定条件覆盖5.条件组合覆盖6.路径覆盖白盒测试之基本路径测试法基本路径测试方法的步骤1.根据程序流程图画控制流图2.计算圈复杂度3.导出测试用例4.准备测试用例5.例题白盒测试总…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...