存储与数据库
存储系统
对于存储系统的定义,一开始,我所认为的就是,一个用来存储数据,需要数据的时候再来调用的系统。在学习了本次的课程之后,我对于存储系统的定义有了新的想法。存储系统,是一个软件组件(提供了读写、控制类接口,能够安全有效地把数据持久化)和硬件组件的结合。主要的组件组成包括存储介质,存储控制器,存储网络和存储管理软件。 存储系统的特点有:性能敏感,容易受硬件影响,存储系统代码需要简单又复杂。
数据库系统
什么是数据库系统? 数据库系统,我个人的理解是:一个包含数据信息的系统,并且可以根据该系统,进行信息的增删改查,并将使用后的数据信息进行相应的更新。简洁一点,就是指一个软件系统,是用于组织、存储和管理大量结构化数据的集合。主要组件包括数据库,数据库管理系统,数据模型,查询语言。对于查询语言,我们一般使用的是SQL。
根据课程的讲解,我们知道数据库主要分为关系型和非关系型两大类。另外,数据库系统本身也是存储系统,只是关系型数据库会在此基础上要求一定的结构化,并具有支持事务和复杂查询语言的能力。
事务能力的特性:
- 事务内的操作只有完全做和不做,是一个明确的选择。
- 事务执行前后,数据状态是一致的。
- 可以隔离多个并发事务,避免影响。
- 事务一旦提交成功,数据保证持久性。
主流产品剖析
单机存储
单机,这个词,想必我们小时候都会遇到,比如单机游戏,就是我们自己玩那个游戏,不能和其他玩家一起合作或者竞争来进行游戏。这里的单机存储同样如此,指的是:单个计算机节点上的存储软件系统,一般不涉及网络交互。
单机存储,主要有两种产品,分别是本地文件系统和key-value存储。
分布式存储
分布式存储在单机存储的基础上实现了分布式协议,涉及大量网络交互,主要产品有分布式文件系统和分布式对象存储。
分布式文件存储————HDFS 核心特点:
- 支持海量数据存储
- 高容错性(即使犯了错,也能够运行)
- 弱POSIX语义
- 使用普通X86服务器,性价比高
分布式文件存储————Ceph 核心特点:
- 一套系统支持对象接口,块接口,文件接口,但是一切皆对象
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH算法
CRUSH算法的核心思想:使用一种称为CRUSH映射的规则集,将数据对象的名称、属性和集群拓扑结构映射到存储设备的位置。采用CRUSH算法,主要是因为使用CRUSH算法,系统可以在节点加入、移除或发生故障时,自动调整和重新分布数据,而无需进行全局数据迁移。
单机关系型数据库
常见的关系型数据库系统有MySQL,PostgreSQL。
通用组件:
- Query Engine ———— 负责解析query,生成查询计划
- Txn Manager ———— 负责事务并发管理
- Lock Manager ———— 负责锁相关的策略
- Storage Engine ———— 负责组织内存/磁盘数据结构
- Replication ———— 负责主备同步
常用的关键内存数据结构主要有B-Tree,B+-Tree,LRU List。 常用的关键磁盘数据结构主要有WriteAheadLog(RedoLog),Page。
单机非关系型数据库
常见的非关系型数据库系统有MongoDB,Redis,Elasticsearch。 MongoDB主要特点:
- 面向文档存储
- 文档均可序列化成JSON/BSON,支持嵌套。
- 存在[collection].collection=文档的集合。
- 存储和构建索引能力依赖wiredTiger引擎。
- 4.0后开始支持事务(多文档、跨分片多文档)。
- 常用client/SDK交互,可通过插件转译支持弱SQL
Elasticsearch主要特点:
- 面向文档存储
- 文档均可序列化成JSON,支持嵌套。
- 存在[index].index=文档的集合。
- 存储和构建索引能力依赖Lucene引擎。
- 实现了大量搜索数据结构和算法。
- 支持RESTFUL API,也支持弱SQL交互。
Redis主要特点:
- 数据结构丰富。(hash表,set,zset,list)
- C语言实现,超高性能。
- 主要基于内存,但支持AOF/RDB持久化。
- 常用redis-cil/多语言SDK交互。
分布式数据库
分布式数据库是指:多个计算机可以通过网络交互同时使用同一数据库信息。 引入分布式数据库的原因:单机数据库容量不够使用,CPU资源紧张,较低的性价比,优化空间比较大。