存储与数据库丨青训营笔记
这是我参与「第五届青训营」笔记创作活动的第 18 天。
一、本堂课重点内容
本堂课通过用一个经典案例导入,描述数据是怎么产生,在后端系统里怎么流通,最后怎么写入到存储/数据库系统,,从而展开讲解存储系统、数据库系统的产生背景和基本特点,并对主流存储产品进行了深入剖析,最后介绍了业内最新的存储与数据库的新技术,例如 SPDK、人工智能和新硬件加速等技术。
二、详细知识点介绍
1. 存储与数据库简介
存储系统
存储系统是计算机中用于存储和保护数据的硬件和软件组成的集合。存储系统可以分为多种类型,包括本地存储、网络存储和云存储等。
-
存储器层级结构
计算机存储器层级结构是指在计算机系统中,不同种类的存储器以层级结构的形式组织起来,每一层存储器具有不同的访问速度、容量和成本,如下图所示。
-
RAID 技术
RAID是一种独立磁盘冗余阵列(Redundant Array of Independent Disks)技术,它可以将多个独立的硬盘组合成一个逻辑卷,并在其中实现数据的冗余备份和读写性能的提升。
- RAID 0:RAID 0将多个硬盘并联起来,形成一个大容量的磁盘阵列。RAID 0没有冗余备份,因此数据只存储在其中一个硬盘上,但读写性能比单个硬盘要快。
- RAID 1:RAID 1将两个硬盘镜像,也就是在两个硬盘上同时存储相同的数据。如果其中一个硬盘损坏,另一个硬盘可以继续提供数据服务,因此RAID 1具有很好的数据保护性能。
- RAID 0 + 1:RAID 01通过将多个硬盘分成若干组,每组内部采用RAID 0技术实现高性能读写,不同组之间采用RAID 1技术实现数据冗余备份,从而兼顾了性能和数据保护。
数据库
- 关系型数据库
- 结构化数据友好
- 支持事务
- 支持复杂查询语言
- 非关系型数据库
- 半结构化数据友好
- 可能支持事务
- 可能支持复杂查询语言
- 一般不要求严格的结构化
- 数据库 VS 经典存储
- 结构化数据管理
- 事务能力
- 原子性(Atomicity):事务内的操作要么全做,要么不做
- 一致性(Consistency):事务执行前后,数据状态是一致的
- 隔离性(Isolation):可以隔离多个并发事务,避免影响
- 持久性(Durability):事务一旦提交成功,数据保证持久性
- 复杂查询能力
2. 主流产品剖析
单机存储
-
本地文件系统
在Linux系统中,文件系统是用于组织和管理文件和目录的一种机制。文件系统可以使用不同的数据结构来组织和管理数据,常见的数据结构包括索引节点(inode)和目录项(directory entry)。
-
key-value存储
- 常见使用方式:put(k,v) & get(k)
- 常见数据结构:LSM-Tree
- 代表产品:RocksDB
分布式存储
-
HDFS
HDFS(Hadoop Distributed File System)是一个分布式文件系统,用于在大规模集群中存储和处理大量数据。它是Apache Hadoop项目的核心组件之一,通常与Hadoop生态系统中的其他组件一起使用,如MapReduce和YARN等。
HDFS的核心特点:
-
分布式存储:数据被划分为多个块,并在多个节点上进行存储和复制,以提高数据的可靠性和可用性。
-
高可靠性:HDFS使用数据复制来保证数据的可靠性,当某个节点或服务器出现故障时,可以从其他节点上的副本中恢复数据。
-
高吞吐量:HDFS通过流式数据访问来实现高吞吐量的数据访问,使得它非常适合存储和处理大规模数据。
-
适应批量读写:HDFS适合批量读写,但对于小文件和低延迟的数据访问,性能可能不够好。
-
-
Ceph
Ceph是一个开源的分布式存储系统,可以在大规模集群中提供高可靠性、高性能的分布式存储服务。Ceph采用了分布式对象存储技术,可以将数据分散到多个节点上存储,以提高可靠性和性能。
Ceph的核心特点:
- 可扩展性:Ceph的设计目标是支持PB级别的存储容量和成千上万的客户端节点,它可以在大规模集群中提供高可靠性和高性能的存储服务。
- 高可靠性:Ceph使用数据复制和数据校验等技术来提高数据的可靠性,当某个节点或服务器出现故障时,可以从其他节点上的副本中恢复数据。
- 高性能:Ceph采用了RADOS(Reliable Autonomic Distributed Object Store)作为底层存储技术,它可以在多个节点上并行地进行数据访问和处理,以提高系统的性能。
- 可定制性:Ceph提供了灵活的配置选项,可以根据不同的应用场景和需求来定制存储系统的配置和参数。
单机数据库
-
关系型数据库
-
非关系型数据库
-
关系型数据库与非关系型数据库的区别
- 数据存储方式:关系型数据库采用表格形式存储数据,每个表格由多个行和列组成,行代表记录,列代表属性;而非关系型数据库则不采用表格形式存储数据,而是采用键值对、文档、图形或列族等方式来存储数据。
- 数据查询方式:关系型数据库通过结构化查询语言(SQL)来查询数据,SQL提供了各种查询操作和功能,如关联查询、聚合查询等;而非关系型数据库则通常使用非结构化查询语言或API来查询数据,这些查询语言和API往往基于特定的数据模型和数据存储方式。
- 数据扩展性:关系型数据库对于数据模式的变更和扩展较为困难,需要对数据库结构进行修改;而非关系型数据库则对于数据模式的变更和扩展更加灵活,可以动态地添加、修改和删除数据模型,从而更容易适应业务的变化和扩展。
- 数据一致性和可靠性:关系型数据库采用事务来保证数据的一致性和可靠性,事务能够确保多个操作在数据库中以原子方式执行,要么全部成功,要么全部失败;而非关系型数据库则通常采用其他方式来保证数据的一致性和可靠性,如副本复制、数据分片、数据冗余等。
- 数据存储规模:关系型数据库一般适用于小规模数据存储和高度规范化的数据存储,而非关系型数据库则适用于大规模数据存储和非结构化或半结构化数据存储。
分布式数据库
分布式数据库是指将数据存储在多个节点上,通过网络通信和协调管理,实现对数据的统一管理和访问的数据库系统。分布式数据库可以提高数据的可靠性、可扩展性和性能,是大规模应用的基础设施之一。
3. 新技术演进
SPDK
SPDK(Storage Performance Development Kit)是一个用于开发高性能存储应用的开源工具包。它提供了一组API和工具,帮助开发人员充分利用现代存储设备(如固态硬盘、NVM Express、持久性内存等)的性能,从而实现更高效的存储应用。
AI & Storge
高性能硬件
- RDMA网络
- Persistent Memory
- 可编程交换机
- CPU/GPU/DPU
三、实践练习例子
思路:
- 选择使用现有的存储引擎,如RocksDB
- 使用TCP或UDP协议进行通信,并使用序列化技术将数据序列化后发送
- 使用多线程或异步IO技术,提高IO操作的效率,减少IO操作时延
- 使用分布式一致性协议,如Paxos协议,来实现数据的一致性。同时,需要实现负载均衡和故障恢复机制,确保系统的可靠性和高可用性
四、课后个人总结
通过学习存储和数据库相关的知识,我深入了解了计算机存储系统的层级结构和存储技术的分类,掌握了关系型数据库和非关系型数据库的区别和特点,以及分布式存储和分布式数据库的工作原理和应用场景。同时,我还了解到了存储系统对于AI应用的重要性,不仅需要提供高性能、高可靠性和高扩展性,还需要支持多样化的存储技术和应用场景。
这节课收获颇丰,继续加油!