这是我参与「第五届青训营 」笔记创作活动的第13天
数据->后端服务器->数据库
数据的持久化
校验数据的合法性、修改内存、写入存储介质
存储系统:一个提供了读写、控制类接口、能够安全地把数据持久化的软件,就可以称为存储系统。
存储系统特点:性能敏感,代码简单,但是并发高可用比较复杂,软件架构容易受硬件影响
缓存很重要,贯穿整个体系,拷贝很昂贵要避免
RAID技术:
Redundant Array of Inexpensive Disks
关系型数据库 = 集合 = 任意元素组成的若干有序偶对
- 结构化友好
- 支持事务
- 支持SQL等复杂查询语言
非关系型数据库
- 半结构化
- 不一定支持事务
- 可能支持SQL
A 要么全做 要么不做
C 执行前后状态是一致的
I 多个并发事务
D 一旦提交成功,数据保证持久性
主流产品剖析
本地文件系统
Ext2/3/4 sysfs rootfs
Linux两大数据结构 Index Node & Directory Entry
Index Node:记录文件数据id、大小、权限等,是文件的唯一标识,
Directory Entry:记录文件名、inode指针、层级关系等,内存结构
KV存储
分布式文件系统 - HDFS
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用普通x86服务器、性价比高
分布式存储系统Ceph
- 一切皆对象
- 主备复制模型
- 数据分布模型采用CRUSH算法
单机数据库
关系型:MySQL PostgreSQL
RedoLog:记录在哪个Page进行了什么操作
非关系型数据库:Mongo、Redis、ES三足鼎立
ES
- 文档存储
- index = 文档的集合
- 序列化成JSON,支持嵌套
- 存储和构建索引能力依赖Lucene引擎
- 实现大量搜索数据结构&算法
- 支持RESTful API、SQL交互
mongoDB
- 面向文档存储
- 支持序列化JSON
- collection = 文档的集合
- wiredTiger引擎
- 支持事务
- client/SDK交互
Redis
- 数据结构丰富
- C语言实现,超高性能
- AOF
单机数据库问题
- 容量:单点容量有限,受硬件限制 用池化来解决
- 弹性:扩容 缩容
- 性价比:
分布式问题
单写 vs 多写
磁盘弹性到内存弹性
分布式事务优化