这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
今天学习了关于数据库的存储方面的理论知识,认识了存储的本质,以及了解了市面上主流的关系型数据库和非关系型数据库.
一、经典案例
数据的产生
数据的流动
数据的持久化
从数据的产生开始,到数据的流动最终数据的持久化,在这个过程中有很多潜在问题:
- 数据库怎么保证数据不丢?
- 数据库怎么处理多人同时修改?
- 为什么用数据库,除了数据库还能存到别的存储系统吗??
- 数据库只能处理结构化数据吗?
- 有哪些操作数据库的方式,要用什么编程语言?
二、存储&数据库简介
存储系统
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统
系统特点
- 作为后端软件的底座,性能敏感
- 存储系统软件架构,容易受硬件影响
- 存储系统代码,“简单"又“复杂”
存储器的层级结构
数据从应用到存储介质
- 缓存很重要,贯穿整个存储体系
- 拷贝很昂贵,应该尽量减少
- 硬件设备五花八门,需要有抽象统一的接入层
关系型数据库
特点
- 存储结构:存储结构化的数据,需要事先定义好字段名称,字段类型,字段个数 数据存储在行与列的交汇处(称之为Cell单元格)
- 存储规范:为了充分利用存储空间,尽可能的避免重复(数据冗余),按照数据最小关系表的形式存储,数 据清晰,一目了然
- 查询方式:采用结构化查询语言(SQL)对数据进行管理
- 事务性:为了保证数据的商业业务逻辑以及数据安全性,支持ACID的事务特性
- 读写性能:关系型数据库追求的是数据实时性和数据的一致性
缺点
- 一旦数据表中存储数据后,修改表结构变得特别困难。
- 如果我们想扩展字段时,会对表结构产生影响。
- 即使某一行中的某个字段没有赋值,也要使用null填充
- 一旦涉及到多张表,因为数据表存在着复杂的关系,管理非常不方便。
- 一旦面对海量数据的处理时,读写性能特别差,尤其在高并发这一块。
非关系数据库
- 存储非结构化的数据,比如文本、图片、音频、视频
- 表与表之间没有关联,可扩展性强。
- 保证数据的最终一致性。遵循BASE理论。
- 支持海量数据的存储和高并发的高效读写。
- 支持分布式,能够对数据进行分片存储,扩缩容简单
三、主流产品剖析
单机数据库
关系型数据库
非关系型数据库
Redis, MingoDB, Elasticsearch三足鼎立
分布式数据库
解决容量问题
解决弹性问题
解决性价比问题