认识存储| 青训营笔记

103 阅读5分钟

这是我参与「第五届青训营」伴学笔记创作活动的第15天。

前言

数据库对于一个后端程序员是很重要的。因此,我在学习到Java Web阶段的时候就已经在接触数据库了,一直到现在,接触到了各种各样的数据库,常见的MySQL、SQLServer、Redis、MongoDB等,也有使用它们开发的经验,但你如果突然问我什么是存储,我还确实答不上来。因此,今天的课程对我还是很“新”的。

笔记内容

1.存储 & 数据库

存储系统是指计算机中由存放程序和数据的各种存储设备、控制部件及管理信息调度的设备(硬件)和算法(软件)所组成的系统。 存储系统的层次结构分为3层,即cache、主存、辅助存储器。cache:高速缓冲存储器,容量小,速度快,与CPU中的寄存器通过字进行信息交换。主存:内存,与cache通过块进行信息交换。辅助存储器:主要是磁盘,容积大、价格低、速度慢,与主存通过页面进行信息交换。这里的内容在计算机组成原理这本书中有详细讲解,建议科班生和非科班转码必读的书。

数据库则是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

通过这些概念,我们可以认识到:数据库系统是在存储系统上发展而来的!

2.数据库系统概览

让我们回到正题,既然对存储和数据库都有了一个初步的认识,那么接下来就着重介绍数据库的相关知识点。通常,我们根据数据的存储方式将数据库划分为关系型数据库和非关系型数据库:

2-1.关系型数据库特点

关系型数据库是指采用了关系模型来组织数据的数据库,关系模型指的就是二维表格模型,数据按照表的形式存储,然后多组表构成了一个数据库。

我们常见的MySQL、SQLServer、Oracle等都是关系型数据库,它们的优点是:按照结构化的方法存储数据,因而存储和查询都十分方便;强调ACID规则,满足事务的要求和复杂的数据操作等。

2-2.非关系型数据库特点

非关系型数据库是指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。所以,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

我们常见的Redis、MongoDB、Elasticsearch都是非关系型数据库,它们的优点是:易扩展、存储模式灵活等。因此,目前主流的分布式数据库都是非关系型数据库。

2-3.数据库存储 vs 底层存储

数据库同步和存储同步虽然说都是双中心复制的可用方案,但是从技术稳定性来说,存储的同步复制以及存储双活相比数据库的复制更为成熟,只是存储的复制在切换时,切换操作要复杂的多,可能导致RTO时间变得很长。在核心这样的业务系统上面来看,双中心其实最为基础的需求还是要保存一份完整的数据,因此,存储的同步是保证双中心数据完全一致的最后底线。在far sync架构下,只有在主数据中心运行该套rac的服务器存储以及运行far sync的服务器存储同时宕机的情况下,才会可能发生主备数据中心间同步数据丢失的情况,通常意义这意味着主数据中心整体掉电或者发生主数据中心的整体灾难。在这种情况下,存储的复制是仍然会保证数据的一致性的。因此,对于核心这种关键系统,还是有必要同时采取两种模式的复制的。

2-4.数据库使用方式

这个其实没有什么好讲的,不同的语言对于不同的数据库都有自己的使用方式,其实,我觉得“怎么用”这个问题反而是最简单的,比较难的是“哪里用”和“用什么”。我总说的一句话,技术都是为业务服务的,这里的数据库也是这样,根据自己的业务需求选择适合的数据库去使用。

小结

一句话总结:存储的本质上存储的是状态,不同的状态对应不同的数据,从而满足数据管理和数据应用的需求。我们根据业务需求选择数据库正是基于这样的思想,同理,各种各样的数据库出现也是基于这个本质。

参考文献

青训营资料