概述
系统分层在软件设计中屡见不鲜,从OSI网络7层架构到引用软件的MVC架构等不不体现分层的软件设计思想。软件分层可以提高系统的可维护性,降低每一层的系统的复杂度,并一定程度上起到故障隔离效果。
存储基本原理
从最基础上来说,数据存储主要解决两件事情:“你提供一些数据存储系统将这些数据保存,当你之后要这些数据时,存储系统可以将数据返会给你”。简而言之:
- 数据存取的交互语言(接口)
- 数据存储的方式结构(数据结构)
而存储结构又决定了能够提供的交互接口以及适用的应用场景
接口
存储系统提供给用户的接口界面可以分为两个部分
- 数据模型:即用户交互的数据形式,如关系型数据库就使用的表格的数据模型
- 接口规范:即用户与存储系统交互的语言,如:SQL语言。对于比较简单交互接口可能没有提供这种语言
存储的接口,一般可以分为几类:
- Key/Value: 如:leveldb
- SQL on Table: mysql等关系数据库,Hive/impala等也提供了基于table的sql接口
- 自定义表格接口:ES提供的Json查询语句, Hbase原始接口
- POXIS文件接口:ext4、xfs
- 自定义文件接口:hdfs
- 块存储接口:ceph rdb
- 对象存储接口:S3 OSS
数据结构
数据实际在系统内部的组织形式,具体可以分为几类:
- BTree: innodb、MyISAM
- Hash: Bitcask
- LSM: leveldb、Rocksdb
- blob/chunk/object: ceph、hdfs
案例分析
通过对现有一些存储分析来看一下分层在存储中的使用

数据存储层次.jpg
| 存储系统 | 存储结构 | 数据模型 | 接口规范 |
|---|---|---|---|
| ext4 | inode+block | 文件 | POSIX |
| hdfs | block | 文件 | 自定义接口 |
| hbase | LSM+Column-Oriented | table | 自定义接口 |