这是我参与「第五届青训营」伴学笔记创作活动的第13天。青训营的第十五次课程中对存储系统和数据库的相关知识进行了讲解,下面是我对本次课程内容的一些总结。
存储系统与数据库简介
存储系统,即一个提供了读写、控制接口,并能有效的将数据持久化的软件。数据库也是存储系统的一种,其又分为关系型数据库和非关系型数据库:
- 关系型数据库:支持结构化的数据存储(定义关系的模式),并支持复杂的查询语言;
- 非关系型数据库:不要求严格的结构化,可能支持事务或复杂查询语言;
主流产品介绍
单机存储
单机存储即单个计算机节点上的存储系统,系统内部一般不涉及网络交互,其几个经典案例为:
- Linux文件系统:使用Index Node记录文件元数据,如id、大小、权限、文件位置,作为文件的唯一标识;使用Directory Entry记录文件名,inode指针,层级关系等。
- LSM树KV存储系统:提供Put和Get接口,在内存中使用跳表、红黑树等方式对数据进行写入,并记录预写日志。当内存数据达到一定规模时,将其以键顺序的形式写入磁盘中的SSTable文件。并且,制定一定的压缩策略,使得一个层级的SSTable过大(或数量更多)时将其压缩至下一个层级。
分布式存储
在单机存储的协议上实现了分布式协议,以集群的形式进行工作,代表案例为:
- 分布式文件系统:将若干价格低廉的存储介质组合成集群,并实现可容错的、超大容量的、超高吞吐的文件读写。
- 分布式KV存储:多个KV存储存储系统组合成一个集群,以提升系统的容错性、吞吐率。
数据库
- 单机型关系型数据库:Query Engine负责解析查询语句,生成查询计划;Txn Manager负责事务并发处理;Lock Manager负责锁相关的策略;Storage Engine负责组织内存/磁盘数据结构,并执行持久化,典型的案例为Mysql、Oracle。
- 单机非关系型数据库:典型案例为Redis,其基于内存进行存储,具有很高的读写性能,同时支持AOF/RDB持久化功能。
在单机数据库下,往往面临容量、弹性、性价比的问题,分布式数据库的设计出发点即为解决这些问题:
- 容量:分布式数据库可以将存储节点池化,以实现动态的扩缩容;
- 弹性:在分布式数据库中,可以通过增删存储节点的方式进行灵活的系统调整;
- 性价比:分布式数据库可以使用一组价格低廉的存储节点,以集群的形式提供高性能的服务。