认识存储的本质 | 青训营笔记
这是我参与「第五届青训营 」笔记创作活动的第15天
今天主要对认识存储的本质进行学习。
一、本堂课重点内容:
本次课程讲了以下几个方面:
-
经典案例
-
存储 & 数据库简介
-
主流产品剖析
-
新技术演进
二、详细知识点介绍:
1.经典案例
在我们日常使用各种系统/软件的时候,都会涉及到对数据的使用。例如:我们在使用App的时候注册一个新的账号,在我们填完相关信息之后,数据就此产生了,然后数据就通过网络等其他途径进行传输。如下图:
与此同时,就会存在着以下问题:
- 数据库怎么保证数据不丢?
- 数据库怎么处理多人同时修改的问题?
- 为什么用数据库,除了数据库还能存到别的存储系统吗?
- 数据库只能处理结构化数据吗?
- 有哪些操作数据库的方式,要用什么编程语言?
2.存储 & 数据库简介
2.1存储
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统。存储系统的具有以下特点:
性能敏感,作为后端软件的底座,在性能上应该要能够有保障- 存储系统软件架构,
容易受硬件影响 - 存储系统代码,
既“简单”又“复杂”
2.2数据库
我们可以将数据库分为关系型数据库和非关系型数据库两类。这里所说的关系可以理解为:关系=集合=任意元素组成的若干有序偶对反应了事物间的关系。
关系型数据库的特点: 关系型数据库是存储系统,但是在存储之外,又发展出其他能力。
非关系型数据库的特点: 非关系型数据库也是存储系统,但是一般不要求严格的结构化。
下图是关系型数据库和非关系型数据库存储对比图:
数据库与经典存储数据相比,具有以下特点:
- 事务能力:事务具有ACID的特征
- 复杂的查询能力:在我们写入数据之后,数据库提供了SQL等数据查询语言,可以对其进行复杂的查询
3.主流产品剖析
3.1单机存储
单机存储=单个计算机节点上的存储软件系统,一般不涉及网络交互。在单机存储中又分为本地文件系统和key-value存储。我们平时使用的Windows系统或者Linux系统中,都会涉及文件
- 文件系统的管理单元:文件
- 文件系统接口:文件系统繁多,如Ext2/3/4,sysfs,rootfs等,但都遵循VFS的统一抽象接口
- Linux文件系统的两大数据结构: Index Node & Directory Entry 而在key-value存储中
- 常见使用方式: put(k, v) &get(k)
- 常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能
- 拳头产品: RocksDB
3.2分布式存储
分布式存储=在单机存储基础上实现了分布式协议,涉及大量网络交互。也可细分为分布式文件系统和分布式对象存储(如:Ceph)。分布式文件系统(HDFS)堪称大数据时代的基石,因为专用的高级硬件很贵,同时数据存量很大,要求超高吞吐,所以HDFS应运而生。HDFS具有以下特点:
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用普通x86服务器,性价比高
3.3单机关系型数据库
单机数据库=单个计算机节点上的数据库系统。事务在单机内执行,也可能通过网络交互实现分布式事务。在关系型数据库中,商业产品Oracle称王,开源产品MySQL & PostgreSQL称霸。
3.4单机非关系型数据库
而在非关系型数据库中,MongoDB、Redis、Elasticsearch三足鼎立。
3.5分布式数据库
由于单机数据库会存在容量、弹性、性价比等问题,分布式数据库就此产生,用于解决单机数据库存在的不足。使用分布式数据库
-
1.可以解决容量问题,将存储节点池化,动态扩缩容
-
2.解决弹性问题
-
3.解决性价比问题
4.新技术演进
随着技术的不断发展,软件架构的变更,AI技术的融合、又或者新硬件的不断革新,对于数据的各种存储也会受到其影响。
三、课后个人总结:
通过对认识存储的本质的学习,让我初步了解了数据是怎么产生,在后端系统里怎么流通,最后怎么写入到存储/数据库系统。同时,在我们开发系统或者软件的时候,数据是关键,对于数据的管理与维护也就是核心。最后,还了解到一些单机存储产品、分布式存储产品、单机数据库产品(MySQL、PostgreSQL、Redis、MongoDB等)和分布式数据库产品。随着技术的不断升级,越来越多的新技术也在不断产生,所以对于数据管理层面的产品或技术也会随着不断革新。