数据库读写性能分析

1、 单机类比集群测试

测试环境:

由3台服务器组成的hadoop集群组成分散式文件系统

由一台单独的机器单机类比Hbase集群

由一台机器单机测试Mysql

测试规模:50万条记录以上,单线程、多线程测试

测试结果:

 

 

HBase

Mysql

单线程

插入 100 条记录

155 ms / 154ms

243 ms / 198ms

插入 1000 条记录

740 ms / 884ms

1506 ms / 1554ms

插入 10000 条记录

8304ms/ 6610ms

14110ms/ 12839m

插入 100000 条记录

43090ms /64715ms

108082ms /110664ms

读取 500000左右的条记录

640 ms / 721ms

2779 ms / 2794ms?

100线程

插入 100 条记录

5929ms / 3825ms / 4134ms

15352ms / 12912ms / 12853ms

插入 1000 条记录

35684ms / 52677ms / 34208ms

135839ms / 161711ms / 119909ms

读取 500000左右的条记录

最快的 1104 ms/最慢的 110897 ms

如果不加limit,数据库连接超时

1000线程

插入 100 条记录

325907ms / 322465ms / 342163ms

17455ms / 18953ms / 15169ms

读取500000左右的条记录

最快的 717 ms

如果不加limit,数据库连接超时

HBase不同于一般的关联数据库,它是一个适合于非结构化资料存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式(栏位内容都是char).
上面两种 特性,导致HBase的资料表结构非常松散,栏位内容单一,表与表之前没有任何关联,正因爲这样在查询的时候效率非常高

HBase资料表的性能选项:
MAX_VERSIONS:每一个单元保存多少版本的资料(默认是3)
MAX_LENGTH:每个单元中的版本能够保存多少字节的资料(默认字节数是32位元有符号整数最大值)
COMPRESSION:资料压缩,有BLOCK压缩和RECORD压缩
IN_MEMORY:将这个列组装载资料到存储器,加快读写速度,缺点耗费存储器和干预HDFS的备份
BLOOMFILTER:如果这个列组支援布隆过滤器(BLOOMFILTER),那麽在存储器中有个索引来快速地判断要查找的列是否存在这个行中,减少磁盘IO操作.如
果在这个列组你拥有大量的列,每一个列的资料包含的资料非常小,你可能需要在这个列组中应用布隆过滤器(BLOOMFILTER)

 

2、 列族测试:

测试目标:测试列族增长对性能的影响

测试资料:建表时候定义列族数量,每个列族写入1000字节资料,读取5000次,随机读取任意一列。

测试结果:

单机集群

列族数量

10

100

500

1000

建表时间

12.3

19.2

45.9

Timeout

每秒写入

164

323

419

Timeout

每秒读取

99

139

122

Timeout

 

5机器集群

列族数量

10

100

500

1000

建表时间

12.2

18.7

46.4

Timeout

每秒写入

29

153

376

Timeout

每秒读取

119

111

120

Timeout

 

测试结论:

Hbase建表时间过长,对大列族的时候支援不好

写入速度在多机集群的时候提高较快

 

3排序测试

测试目标:Hbase的行排序是根据主键排序,测试动态或者反序插入时候的性能。

测试资料:动态生成字母资料,zzzzz-aaaaa,还有随机插入

测试结果:

 

单机集群(每秒多少行)

写入行

10,000

100,000

1,000,000

顺序

485

432

334

反序

451

477

354

随机

462

421

334

 

5机集群(每秒多少行)

写入行

10,000

100,000

1,000,000

顺序

488

440

346

反序

522

387

343

随机

468

441

370

 

测试结论:

采用B树存储和写入缓存,写入数量和顺序对速度影响并不大,应该只是cpu占用的不同。

主要瓶颈还是在网络传输速度上。