概述
系統(tǒng)分層在軟件設(shè)計(jì)中屢見(jiàn)不鮮,從OSI網(wǎng)絡(luò)7層架構(gòu)到引用軟件的MVC架構(gòu)等不不體現(xiàn)分層的軟件設(shè)計(jì)思想。軟件分層可以提高系統(tǒng)的可維護(hù)性,降低每一層的系統(tǒng)的復(fù)雜度,并一定程度上起到故障隔離效果。
存儲(chǔ)基本原理
從最基礎(chǔ)上來(lái)說(shuō),數(shù)據(jù)存儲(chǔ)主要解決兩件事情:“你提供一些數(shù)據(jù)存儲(chǔ)系統(tǒng)將這些數(shù)據(jù)保存,當(dāng)你之后要這些數(shù)據(jù)時(shí),存儲(chǔ)系統(tǒng)可以將數(shù)據(jù)返會(huì)給你”。簡(jiǎn)而言之:
- 數(shù)據(jù)存取的交互語(yǔ)言(接口)
- 數(shù)據(jù)存儲(chǔ)的方式結(jié)構(gòu)(數(shù)據(jù)結(jié)構(gòu))
而存儲(chǔ)結(jié)構(gòu)又決定了能夠提供的交互接口以及適用的應(yīng)用場(chǎng)景
接口
存儲(chǔ)系統(tǒng)提供給用戶的接口界面可以分為兩個(gè)部分
- 數(shù)據(jù)模型:即用戶交互的數(shù)據(jù)形式,如關(guān)系型數(shù)據(jù)庫(kù)就使用的表格的數(shù)據(jù)模型
- 接口規(guī)范:即用戶與存儲(chǔ)系統(tǒng)交互的語(yǔ)言,如:SQL語(yǔ)言。對(duì)于比較簡(jiǎn)單交互接口可能沒(méi)有提供這種語(yǔ)言
存儲(chǔ)的接口,一般可以分為幾類:
- Key/Value: 如:leveldb
- SQL on Table: mysql等關(guān)系數(shù)據(jù)庫(kù),Hive/impala等也提供了基于table的sql接口
- 自定義表格接口:ES提供的Json查詢語(yǔ)句, Hbase原始接口
- POXIS文件接口:ext4、xfs
- 自定義文件接口:hdfs
- 塊存儲(chǔ)接口:ceph rdb
- 對(duì)象存儲(chǔ)接口:S3 OSS
數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)實(shí)際在系統(tǒng)內(nèi)部的組織形式,具體可以分為幾類:
- BTree: innodb、MyISAM
- Hash: Bitcask
- LSM: leveldb、Rocksdb
- blob/chunk/object: ceph、hdfs
案例分析
通過(guò)對(duì)現(xiàn)有一些存儲(chǔ)分析來(lái)看一下分層在存儲(chǔ)中的使用

數(shù)據(jù)存儲(chǔ)層次.jpg
| 存儲(chǔ)系統(tǒng) | 存儲(chǔ)結(jié)構(gòu) | 數(shù)據(jù)模型 | 接口規(guī)范 |
|---|---|---|---|
| ext4 | inode+block | 文件 | POSIX |
| hdfs | block | 文件 | 自定義接口 |
| hbase | LSM+Column-Oriented | table | 自定義接口 |