存储与数据库 | 青训营

86 阅读4分钟

简介

一条数据从产生,到数据流动,最后持久化的整个生命周期

假设小明同学下载了一个新的app,并且注册了一个账号,这样,数据就产生了,并在十几毫秒的的时间内向公司的服务器飞奔而去。

"user_name":"xiaoming"
"password":"helloworld"
"password_hint":"coding"

但这还没有结束,最后数据还需要被存储到后端的存储系统中,这样持久化才完成,数据才不会丢失。

若将数据仅存储在内存中,所有的服务便没了记忆,用户每次使用都要重新注册。

对于数据持久化的过程,也分为许多步骤:

  1. 校验数据的合法性
  2. 用高效的数据结构组织数据
  3. 以寿命和性能友好的方式写入硬件

但在实际的使用过程中,数据库还存在许多问题:

  1. 数据库能否保证数据绝对不丢失(显然不能百分百保证)
  2. 数据库要怎么处理多人同时修改的问题
  3. 除了数据库,数据还能存储到其他地方吗
  4. 数据库只能处理结构化数据吗
  5. 对于数据库的操作有哪些方法

存储系统的特点

基本特点

  1. 作为后端的底座,其对性能极端敏感
  2. 存储系统的硬件依赖性很强,软件要顺应复杂的硬件环境
  3. 存储系统的代码分支少,性能优,简单,同时又在异常分支上复杂,能够应对不同问题

层级结构

最高层的塔尖代表一类容量极小但支持超高性能访问底部则相反,且访问方式可能十分不友好,如磁带,只能顺序播报。

对于整个存储体系,缓存十分重要,其贯穿各种硬件,可以兼容各种读取方式,采用友好方式,同时,拷贝十分昂贵,其会消耗cpu资源,使得其他功能无法使用性能降低,因此,硬件环境五花八门的情况下,需要一个统一的接口。

RAID技术

出现背景:

  1. 单块大容量磁盘价格远远高于多块小容量磁盘
  2. 单块磁盘读写能力弱于多块磁盘
  3. 单块磁盘不够安全,数据得不到保障

RAID0是由多块磁盘组成,数据条带化处理,没有容错设计,其写入性能提高

RAID1是原基础上一块磁盘额外写入到镜像盘中,其空间利用效率低,但容错能力强

将两个极端组合,便成了RAID0+1,其结合了RAID0和RAID1的特点,空间利用率为50%,容错能力低,写入带宽好

数据库

数据库能分为关系型数据库非关系型数据库,关系型数据库就是一个存储系统,其对结构化数据友好,支持事务和复杂的查询语言,非关系型数据库,一般不要求严格的结构化,不一定支持事务,不一定支持复杂的查询语言,关系型数据库对结构化数据的管理仅需添加新的行即可增加数据,而非关则需要先描述数据的长度再存入内容,若要对其数据进行操作,则需要进行大量的byte级操作,同时,事务能力也是一个强大的特性,其具有ACID四个特性,即事务内的操作要么全做要么不做,事务执行前后数据的状态是一致的,可以隔离多个并发事务避免影响,事务一旦提交成功,数据保证持久性,对于多条件的复杂查询,关系型数据库也能方便地进行查询,灵活简介。

单机存储系统

常见的由本地存储系统和kv存储系统,文件系统的管理单元是文件,接口则繁多,如Ext2/3/4等但都遵循VFS的统一抽象接口,数据结构则分为INDEX NODEDIRECTORY ENTRY,前者是文件的唯一标识。

key-value存储

其牺牲了一部分读性能,追求写入性能,对于友好的输入方式有较高的性能,如RocksDB。

分布式存储系统

HDFS:当时专用的高级硬件很贵,同时数据存量大,要求超高吞吐,其需支持高容错性,弱POSIX语义,使用x86服务器,性价比高。

Ceph:有一套系统支持对象接口,块接口,文件接口,一切皆是对象,数据写入采用主备复制模型,数据分布模型采用CRUSH算法。

以上即为关于数据库及存储的基础知识。