|
Name Server |
線上伸縮性 |
效能 |
Hadoop |
小檔案 |
索引 |
GlusterFS |
無 |
N/remount |
S |
map |
Y* |
|
FastDFS |
多個 |
Y |
F |
|
Y* |
|
MogileFS |
多個 |
Y |
N |
|
Y* |
|
TFS |
主備 |
Y |
F |
|
Y |
|
MFS |
多個 |
Y |
F |
Y |
|
|
GridFS |
N/1 |
Y |
N |
|
Y |
|
HDFS |
主備 |
Y |
N |
Y |
|
|
mongoDB |
3/1 |
Y |
N |
map |
Y |
Y |
hypertable |
主備 |
Y |
F |
Y |
Y |
Y |
Voldemort |
無 |
N |
F |
|
Y* |
|
CouchBase |
多個 |
Y |
H |
|
Y* |
Y |
Cassandra |
無 |
Y |
N |
|
Y |
|
GlusterFS
堆棧式,使用者可以通過不同的模組不斷的疊加功能。比如先做各種軟RAID, 然後加卷管理,然後FUSE,然後NFS。這些是通過雙邊的翻譯器提供的。
無中繼資料,使用開放式的hash,目錄的二次映射中繼資料存在目錄資訊裡邊。
如果用非Gluster用戶端,比如NFS,效能很一般,而且讀寫只能是同時單個節點。而使用gluster用戶端的是全聯通,這樣對用戶端的個數就有嚴格控制了。
不支援刪節點。只能替換。
MogileFS
Trackers + Storage Servers
Trackers中繼資料用mysql維護。
Storage Server就是一個web伺服器,用本身的mogstored,或者nginx、apache加上些擴充均可。上傳下載都基於REST(WebDAV)
FastDFS
Trackers+Storage Server
一個相當輕的檔案系統,小巧精悍。
複製:通過組的方式來控制複製(組內全量),另外在一定時間內的檔案的訪問只在組中的源服務中,這樣來避開檔案尚未同步到其他群組成員的尷尬。
中繼資料放在檔案名稱中:
組名+磁碟+目錄+檔案名稱,Storage server可以根據檔案ID直接定位到檔案。例如: group2/M00/00/00/CgrgQE7MsRXaKxx9AAzodQCbVVc047.jpg。 從檔案名稱可以反解出檔案建立時間和源SS的IP這兩個欄位,這樣如何時間達不到30分鐘,直接存取原始伺服器,連訪問tracker的步驟都省了。
通過這種命名方式,中繼資料就很輕,只需維護組,還有組的負荷。
TFS
同FastDFS一樣,將中繼資料疊入檔案名稱中,減少系統維護的中繼資料數量,從而支援眾多的小檔案。
DataServer:可以根據檔案名稱的blockid區定位到DS,根據檔案名稱中的fileid區擷取到具體DS中的檔案名稱,DS中維護了該檔案名稱對應的磁碟檔案以及在磁碟檔案裡邊的位移量和長度。
MFS
Mapr的HDFS相容產品,C++,充分利用硬體特性:裸裝置
GridFS
使用MongoDB來存放檔案。
MongoDB
多個config server,但是只要有一台出現問題,整個系統就變得唯讀。
CouchBase
Memcached+虛擬記憶體的方式。
儲存基於bucket,多個buckets組成一個vbucket。
通過lucence的方式來支援view和資料的搜尋。
Voldemort
文檔極少,Read-repair, 儲存支援多種引擎,比如BDB,MySQL,in-memory.read-only
一致性hash,複製的時候根據key的位置,搜尋當前和之後的r-1個不同節點
HyperTable
1. 中繼資料節點支援HA
2. 支援hql,支援遍曆, 支援正則表達鍵和value(row_regexp,value_regexp)
3. 支援Map-reduce方式處理資料
4. 效能更好,同樣使用HDFS超過HBase 30%
5. 底層儲存支援local file和MapR。 其中MapR沒有單點NameNode問題,另外效能號稱是hadoop的三倍
OS: CentOS 6.1
CPU: 2X AMD C32 Six Core Model 4170 HE 2.1Ghz
RAM: 24GB 1333 MHz DDR3
disk: 4X 2TB SATA Western Digital RE4-GP WD2002FYPS
12台機器
Write
Value Size |
Key Count |
Hypertable Throughput MB/s |
HBase Throughput MB/s |
10,000 |
500,041,347 |
188 |
93.5 |
1,000 |
4,912,173,058 |
183 |
84 |
100 |
41,753,471,955 |
113 |
? |
10 |
167,013,888,782 |
34 |
|
Scan
Value Size |
Keys Submitted |
Hypertable Keys Returned |
HBase Keys Returned |
Hypertable Throughput MB/s |
HBase Throughput MB/s |
10,000 |
500,041,347 |
500,041,347 |
500,026,388 |
478 |
397 |
1,000 |
4,912,173,058 |
4,912,173,058 |
4,912,184,933 |
469 |
371 |
100 |
41,753,471,955 |
41,753,471,955 |
* |
413 |
* |
10 |
167,013,888,782 |
167,013,888,782 |
* |
292 |
|
SRandom read
Dataset Size |
Hypertable Queries/s |
HBase Queries/s |
Hypertable Latency (ms) |
HBase Latency (ms) |
0.5 TB |
7901.02 |
4254.81 |
64.764 |
120.299 |
5 TB |
5842.37 |
3113.95 |
87.532 |
164.366 |
Uniform read
Dataset Size |
Hypertable Queries/s |
HBase Queries/s |
Hypertable Latency (ms) |
HBase Latency (ms) |
0.5 TB |
3256.42 |
2969.52 |
157.221 |
172.351 |
5 TB |
2450.01 |
2066.52 |
208.972 |
247.680 |