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 | HBase |
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 | HBase | Hypertable | HBase |
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 | Hypertable | HBase | Hypertable | HBase |
0.5 TB | 7901.02 | 4254.81 | 64.764 | 120.299 |
5 TB | 5842.37 | 3113.95 | 87.532 | 164.366 |
Uniform read
Dataset | Hypertable | HBase | Hypertable | HBase |
0.5 TB | 3256.42 | 2969.52 | 157.221 | 172.351 |
5 TB | 2450.01 | 2066.52 | 208.972 | 247.680 |