认识存储与数据库
案例引入
小明注册登录产生的数据流入后端 格式为json
{
"user_name":"小明",
"password":"helloword",
"password_hint":"coding",
......
}
数据流入后端并被处理,参与的有:后端服务器,数据库,以及其他系统。
数据的持久化
- 校验数据的合法性
- 修改内存
- 写入存储介质
存储系统
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以成为存储系统。
存储系统的特点:
1.性能敏感。 2.容易受硬件影响。
存储层级结构
【缓存】很重要,贯穿整个存储体系。 【拷贝】很昂贵,应该尽量减少。 【接入层】要统一,使用的是Json。
RAID计数
高性能、高性价比、高可靠性
背景:
1.单块大容量磁盘价格 > 多块小容量磁盘.
2.单块磁盘的写入性能 > 多块磁盘的并发写入性能.
3.单块磁盘的容错能力有限,不够安全.
RAID 0和RAID 1是两个极端,不过有RAID 0+1结合折中
数据库
关系型数据库
关系=集合,反映了事物间的关系。
关系代数是对关系做运算的抽象查询语言。
关系型数据库在存储之外还有其他能力: 结构化数据友好,支持事务,支持复杂查询语言
非关系型数据库
非关系型数据库也是存储系统,但是一般不要求严格的结构化。
结构化数据管理
写入关系型数据库时,以表形式管理。 写入非关系型数据库时,写入文件,自行管理结构(可以以字节为单位管理)。
事务
A:要么全做要么全不做
C:事务执行前后,数据状态一致
I:可以隔离多个并发事务,避免影响
D:事务一旦提交成功,数据保证持久性。
复杂查询
使用SQL语言比使用for循环简洁方便得多
主流产品剖析
单机存储
一般不涉及网络交互。
Linux经典哲学一切皆文件。
一切皆key-value键值对,某种程度上牺牲读性能,追求写入性能
拳头产品:RocksDB
分布式存储
在单机存储基础上实现了分布式协议,涉及大量网络交互。
核心特点: 支持海量数据存储,高容错性,弱POSIX语义,使用x86服务器,性价比高。
ceph万金油
一切皆对象。
数据写入采用主备赋值模型。
数据分布模型采用CRUSH算法(hash+权重+随机抽签)
单机关系型数据库
事务在单机内执行,也可能通过网络交互实现分布式事务。
商业Oracle,开源产品MySQL,PostgreSQL
单机非关系型数据库
MongoDB,Redis,Elasticsearch。
交互方式各不相同,schema相对灵活。
Ela面向文档存储,支持嵌套,支持弱SQl交互。
MonDB支持事务,可以转译支持弱SQL。
Redis数据结构丰富,C语言实现,性能高。
使用案例
ES天然能进行模糊搜索,并计算出相关程度。
从单机到分布式
单点容量有限,受硬件限制。
存储节点池化,动态扩容。
解决弹性问题。
解决性价比问题。
有挑战性的问题
单写到多写,从磁盘弹性到内存弹性,分布式事务优化。