241126学习日志——[CSDIY] [ByteDance] 后端训练营 [19]

ops/2024/11/27 10:24:56/

CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!!
第一弹:Cpp零基础学习【30 DAYS 从0到1】
第二弹:Cpp刷题文档【LeetCode】
第三弹:Go开发入门【字节后端青训营】
第四弹:Cpp简单项目开发【黑马Rookie】
第五弹:数据结构绪论【数据结构与算法】
第六弹:Go工程实践【字节后端青训营】
第七弹:高质量编程和性能调优【字节后端青训营】
第八弹:Linux 基础知识【书生大模型训练营】
第九弹:Python 基础知识【书生大模型训练营】
第十弹:Git 基础知识【书生大模型训练营】
第十一弹:玩转HF/魔搭/魔乐社区【书生大模型训练营】
第十二弹:书生大模型全链路开源体系【书生大模型训练营】
第十三弹:玩转书生「多模态对话」与「AI搜索」产品【书生大模型训练营】
第十四弹:浦语提示词工程实践【书生大模型训练营】
第十五弹:HTTP 框架修炼之道【字节后端青训营】
第十六弹:打开抖音会发生什么【字节后端青训营】
第十七弹:将我的服务开放给用户【字节后端青训营】
第十八弹:InternLM + LlamaIndex RAG 实践【书生大模型训练营】
第十九弹:深入浅出 RPC 框架【字节后端青训营】
第二十弹:带你认识存储 & 数据库【字节后端青训营】

01. 经典案例

一条数据从产生,到数据流动,最后持久化的全生命周期

1.1 数据的产生

一条用户的数据

{字段:值
}

1.2 数据的流动

用户数据 - 后端服务器 - 数据库 - 其它系统…

1.3 数据的持久化

  • 校验数据的合法性:“用户是否已经存在”

  • 修改内存:用高效的数据结构组织数据

  • 写入存储介质:以寿命 & 性能友好的方式写入硬件

1.4 潜在的问题

  • 数据库怎么保证数据不丢
  • 数据库怎样处理多人同时修改的问题?
  • 为什么用数据库,除了数据库还能存到别的存储系统吗?
  • 数据库只能处理结构化数据吗?
  • 有哪些操作数据库的方式,要用什么编程语言

02. 存储 & 数据库简介

什么是存储系统?什么是数据库?

  • 什么是存储系统?
    • 一个提供了读写控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统。

2.1 存储系统 - 系统特点

  • 作为后端软件的底座,性能敏感

  • 存储系统代码,既“简单”又“复杂”

  • 存储系统软件架构,容易受硬件影响

2.2 存储系统 - 存储器层级结构

Computer Memory Hierarchy

2.3 存储系统 - 数据怎么从应用到存储介质

  • 缓存很重要,贯穿整个存储体系
  • 拷贝很昂贵,应该尽量减少
  • 硬件设备五花八门,需要有抽象统一的接入层(防止因为底层硬件改变而导致框架崩塌)

2.4 存储系统 - RAID 技术

单机存储系统做到高性能/高性价比/高可靠性

Redundant Array of Inexpensive Disk

单块磁盘的价格贵于多个小磁盘,写入性能却劣于多个小磁盘,且容错能力有限,不够安全。

RAID 0
  • 多块磁盘简单组合
  • 数据条带化存储,提高磁盘带宽
  • 没有额外的容错设计
RAID 1
  • 一块磁盘对应一块额外镜像盘
  • 真实利用率仅仅50%
  • 容错能力强
RAID 0 + 1 / 1 + 0
  • 结合 RAID 0 和 RAID 1
  • 真实利用率仅仅50%
  • 容错能力强,写入带宽大

2.5 数据库

难道数据库和存储系统不一样吗?

关系型数据库、非关系型数据库

2.6 数据库 - 概览

关系(Relation)是什么

关系 = 集合 = 任意元素组成的若干有序偶对

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

SQL = 一种 DSL = 一种方便人类阅读的表达形式

2.7 数据库 - 关系型数据库特点

关系型数据库是存储系统,但是在存储之外,又发展出其他能力

  • 结构化友好
  • 支持 ACID
  • 支持 SQL

2.8 数据库 - 非关系型数据库特点

非关系型数据库也是存储系统,但是一般不要求严格的结构化

2.9 数据库 VS 经典存储 - 结构化数据结构

写入文件,自行定义 管理结构

2.10 数据库 VS 经典存储 - 事务能力

事物具有 ACID 的特性。

凸显数据库支持 [事物] 的优越性

  • Atomicity,事务内的操作要么全做,要么不做
  • Consistency,事务执行前后,数据状态是一致的
  • Isolation,可以隔离多个并发事务,避免影响
  • Durability

2.11 数据库 VS 经典存储 - 复杂查询能力

灵活简洁的代码

2.12 数据库使用方式

Everything is DSL

03. 主流产品剖析

3.1 单机存储 - 概览

Linux 经典哲学:一切皆文件

文件系统的管理单元:文件

文件系统接口:文件系统繁多

Linux文件系统的两大数据结构:Index Node & Directory Entry

Index Node

记录文件元数据

Directory Entry

记录文件名,inode指针,层级关系等

3.2 单机存储 - key - value 存储

常见方式:put(k,v) & get(k)

常见数据结构:LSM - Tree,某种程度上牺牲读性能,追求写入性能

3.3 分布式存储 - 概览

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

3.4 分布式存储 - HDFS

堪称大数据时代的基石

核心特点:

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

3.5 分布式存储 - Ceph

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

核心特点:

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

3.6 单机数据库 - 概览

关系型/非关系型

3.7 单机数据库 - 关系型数据库

Oracle、MySQL、PostgreSQL

3.8 单机数据库 - 非关系型数据库

Elasticsearch
  • 面向文档存储
  • 文档可序列化成JSON,支持嵌套
  • 存在 [index],index = 文档的集合
  • 存储和构建索引能力依赖 Lucene 引擎
  • 实现了大量搜索数据结构 & 算法

3.9 从单机到分布式数据库

为什么引入分布式架构

  • 容量、弹性、性价比

3.10 分布式数据库 - 解决容量问题

~单点容量有限,受硬件影响

👇

~存储节点化,动态扩缩容

3.11 分布式数据库 - 解决弹性问题

可以随时扩容缩容等操作…

3.12 分布式数据库 - 解决性价比问题

3.13 分布式数据库 - More to Do

多写

内存弹性

分布式事务优化

04. 新技术演进

4.1 新技术演进 - 概览

软件架构变更

AI 增强

  • 智能存储格式转换

新硬件革命

  • 存储介质、计算单元、网络硬件

4.2 新技术演进 - SPDK

Bypass OS kernel 已经成为一种趋势

4.3 新技术演进 - AI & Storage

4.3 新技术演进 - 高性能硬件

  • RDMA 网络
  • Persistent Memory
  • 可编程交换机
  • CPU/GPU/DPU

http://www.ppmy.cn/ops/137051.html

相关文章

Deepnote、JupyterLab、Google Colab、Amazon SageMaker、VS Code对比

功能比较 平台语言支持扩展性数据连接可视化能力DeepnotePython、R、SQL中等,依赖云端支持主要云平台(BigQuery、Snowflake等)内置仪表盘与交互图表JupyterLab多种语言,插件支持广泛极高,完全可自定义使用库&#xff…

【C++】list模拟实现(完结)

1.普通迭代器(补充) 1.1 后置和后置-- 我们迭代器里面实现了前置和前置--,还需要实现后置和后置--。 在list.h文件的list_iterator类里面实现。 //后置/-- Self& operator(int) {Self tem(*this);//保存原来的值_node _node->_nex…

111.有效数字

class Solution {public boolean isValid(String word) {if(word.length()<3){return false;}int countV0,countC0;//分别统计原音和辅音for(int i0;i<word.length();i){if(Character.isLetterOrDigit(word.charAt(i))){if(word.charAt(i)a||word.charAt(i)e||word.charA…

Xcode15(iOS17.4)打包的项目在 iOS12 系统上启动崩溃

0x00 启动崩溃 崩溃日志&#xff0c;只有 2 行&#xff0c;看不出啥来。 0x01 默认配置 由于我开发时&#xff0c;使用的 Xcode 14.1&#xff0c;打包在另外一台电脑 Xcode 15.3 Xcode 14.1 Build Settings -> Asset Catalog Compliter - Options Xcode 15.3 Build S…

Flutter实现tts语音播报

目录 引言 添加flutter_tts依赖 设置语言和发音人 macOS Android iOS 说话、停止、获取语言、设置语言、设置语音速率、获取声音、设置声音、设置音量、设置音高、是否语言可用、设置共享实例 监听平台 封装代码 使用案例 引言 随着移动应用的不断发展&#xff0c;…

godot游戏引擎_瓦片集和瓦片地图介绍

在 Godot 中&#xff0c;TileSet 和 TileMap 是用于处理瓦片地图的两个关键概念&#xff0c;它们的作用和用途有明显的区别。以下是两者的详细对比&#xff1a; 1. TileSet&#xff08;瓦片集&#xff09; TileSet 是资源&#xff0c;定义瓦片的内容和属性。 特点&#xff1a…

【Electron学习笔记(二)】基于Electron开发应用程序

基于Electron开发本地应用程序 基于Electron开发本地应用程序前言正文1、创建 pages 目录2、创建 index.html 文件3 、创建 html.css 文件4 、main.js里引入页面5 、运行 start 命令6 、启用开发者模式7 、解决内容安全策略8、完善窗口行为9、配置自动重启&#xff0c;保存后自…

vue3+ts 我写了一个跟swagger.yml生成请求和响应实体(接口)

一、下载地址 swagger-to-ts: 使用python编写的一个根据swagger.yml生成vue3或ts的接口&#xff08;interface&#xff09;和类&#xff08;class&#xff09; - Gitee.com 进入下面页面&#xff0c;将这两个文件一起下载 二、配置 打开 config.toml 文件&#xff0c;修改ip为…