【青训营X豆包MarsCode】第三课-带你认识存储 & 数据库
带你认识存储 & 数据库
经典案例
一条数据从产生,到数据流动,最后持久化的全生命周期
用户脑子 =》 后端服务器 =》 数据库 (《=》其他系统)
数据的持久化
注册“小明”,检查是否存在(合法性),用数据架构组织数据(修改内存),写入硬件(写入存储介质)
潜在问题
Q、数据库怎么保证数据不丢?
数据库通常使用事务日志和多副本存储来保证数据可靠性。即使发生故障,也能通过日志恢复数据。
Q、数据库怎么处理多人同时修改的问题?
数据库通过事务的隔离性和锁机制来确保并发访问的正确性。
Q、为什么用数据库,除了数据库还能存到别的存储系统吗?
数据库提供更强的数据管理能力(如事务、索引、高效查询),但对于特定场景,也可以使用文件系统、分布式存储等替代。
Q、数据库只能处理结构化数据吗?
不是,关系型数据库擅长处理结构化数据,而非关系型数据库可以处理半结构化或非结构化数据(如JSON、图像)。
Q、有哪些操作数据库的方式,要用什么编程语言?
常用SQL操作关系型数据库,或使用数据库的SDK(Java、Python、Go等)与其交互;非关系型数据库通常提供RESTful API或自定义协议。
存储 & 数据库简介
数据库和存储系统背景知识,它们是什么,有哪些特点?
用户、硬件、内存、网络
性能要求高、代码简单又复杂、容易受硬件影响
性能要求高:后端软件的底座
代码简单又复杂:考虑到软件硬件可能会出错各种异常情况
易受硬件影响:软件顺应硬件的变革而变
存储器层级结构
存储器:容量、读取速度
数据怎么从应用到存储介质
【缓存】很重要,贯穿整个存储体系
【拷贝】很昂贵,应该尽量减少
需要有抽象统一的接口层
RAID技术用于存储系统的容错和性能优化
存储系统和数据库的区别
存储系统:关注数据的存储与检索,如文件系统、分布式存储。
数据库:强调数据管理与关系处理,支持复杂的查询和事务。
ACID
原子性、一致性、隔离性、持久性
- 原子性:事务要么完全完成,要么完全失败。
- 一致性:事务结束后,数据库从一个一致状态转到另一个一致状态。
- 隔离性:并发事务互不干扰。
- 持久性:事务提交后,数据永久存储。
主流产品剖析
主流的存储 & 数据库系统架构,经典产品剖析
单机存储
本地文件系统
- Linux哲学“一切皆文件”,通过索引节点(Index Node)和目录项(Directory Entry)组织数据。
Key-Value存储
- 采用LSM-Tree结构优化写入性能,如LevelDB。
分布式存储
在单机存储基础上实现分布式协议,涉及网络交互
- HDFS:Master-Slave架构,适合大文件存储。
- Ceph:分布式对象存储,支持块存储和文件系统。
单机关系型数据库
Oracle:企业级数据库,功能强大但成本高。
MySQL:开源数据库,易用且性能优良。
PostgreSQL:支持复杂查询和扩展功能。
单机非关系型数据库
MongoDB:文档型数据库,灵活处理JSON数据。
Redis:高性能Key-Value数据库,支持缓存和持久化。
Elasticsearch:全文检索数据库,适合处理日志数据和搜索需求。
交互方式各不相同
scheme相对灵活
分布式数据库
解决单机容量和性能限制问题
容量、弹性、性价比
TiDB、CockroachDB
新技术演进
老系统结合新技术,如何持续演进走向新生?
硬件革命:
- NVM(非易失性存储器):结合DRAM和SSD的优势。
- SPDK(存储性能开发工具包):高性能存储访问优化技术。
AI增强:
- 智能查询优化器、数据分析加速器。
软件架构变革:
- 从单体架构到微服务、Serverless等现代架构。