數(shù)據(jù)存儲(chǔ)的分層思想

概述

系統(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 自定義接口
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容