青训营 x 存储与数据库
数据库是后端技能树的重要一环,可以说是每个后端工程师必须掌握的,也是在面试找工作时必考的内容,需要每个后端人认真学习。
什么是数据持久化?
我们在使用互联网上的各种服务时,随时都在产生大量的数据,数据在客户端与服务器间进行交互传输,为了保证数据的完整性也为了方便客户端与服务器间共享传输,服务器需要将一些数据存储在服务器中的持久性存储设备上以供再次使用,将数据保存在持久性存储设备上这一行为就是数据持久化。
存储系统
服务器需要一套工具来完成数据的持久化,而这套工具就是存储系统。存储系统提供读写和控制类接口,能安全有效地将数据持久化。持久化方法的实现依赖于本地硬件设备,不同的硬件设备持久化方法也不同,因此需要抽象统一的接入层来解决这个问题。
本地文件系统
Linux遵循:一切皆文件,这条设计哲学。Linux文件系统的管理单元就是文件,虽然文件系统的实现有很多种,但是都遵循VFS的统一抽象接口。
Linux文件系统包含两大数据结构:Index Node(文件的唯一标识)和Directory Entry(记录文件名,inode指针和层级结构等)。
RAID
RAID(Redundant Arrays of Independent Disks)技术为了实现单机存储的高性能、高性价比、高可靠性而存在
根据功能与组合方式不同RAID又可以分为不同类型:
- RAID 0:多块磁盘简单组合在一起,条带化存储提高磁盘带宽,没有额外的容错
- RAID 1:每块磁盘绑定一个镜像磁盘,空间利用率为50%,但同时也提供一倍的容错
- RAID 0+1:结合上述两者的特点,在提供容错的同时提高磁盘带宽
数据库
什么是关系?
关系是任意元素间组成的若干有序偶对,反应着实体间的联系
什么是关系代数?
关系代数是对关系做运算的抽象语言,包括交、并、笛卡尔积等
什么是SQL?
形式化查询语言,将关系代数以方便人类阅读的形式表现的语言
关系型数据库是一种存储系统,但是在之上已经发展出了许多新的能力:对结构化数据友好、支持事务、 支持SQL等。非关系型数据库相比关系型数据不严格要求数据的结构化,功能相对关系型数据库较为薄弱。
数据库相比传统存储最为突出的优点就是支持事务,学过数据库的同学应该都知道数据库的四个特性(ACID):
- Atomicity 原子性
- Consistency 一致性
- Isolation 隔离
- Durability 持久性
对于关系型数据库,商业数据库产品中Oracle具有统治地位,开源数据库则一般采用MySQL和PostgreSQL。非关系型数据库主要使用MongoDB、Redis、Elasticsearch(支持模糊搜索)。
单机数据库受限于本地硬件,存储和处理能力都有限;分布式数据库应运而生,通过存储节点池化、动态扩缩容扩展数据库的性能。