对比mongodb和hbase插入性能

1. 部署Yahoo开源工具YCSB

1.1 安装

下载稳定版本0.17.0并解压到/opt/ycsb目录下,https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz

1.2 测试验证

On Linux:

bin/ycsb.sh load basic -P workloads/workloada

bin/ycsb.sh run basic -P workloads/workloada

On Windows:

bin/ycsb.bat load basic -P workloads\workloada

bin/ycsb.bat run basic -P workloads\workloada

结果见下图

[图片上传失败...(image-564404-1589181294848)]

[图片上传失败...(image-eca53a-1589181294848)]

2 mongodb性能测试

2.1 创建表和索引

在172.16.18.73服务器上创建库和表索引

shell> mongo –port 20000

use admin;

db.runComman({enablesharding:”test1”});

db.runCommand( { shardcollection : "test1.usertable",key : {_id: "hashed"} } )

2.2 ycsb-mongodb 配置文件

写入安全性为常规

mongodb.writeConcern=acknowledged

测试数据集的记录条数

recordcount=10000000

测试数据集的列数(属性的个数)

operationcount=100

workload实现类

workload=site.ycsb.workloads.CoreWorkload

查询时是否读取记录的所有字段

readallfields=true

读操作的百分比

readproportion=0

更新操作的百分比

updateproportion=0

扫描操作的百分比

scanproportion=0

插入操作的百分比

insertproportion=1

请求分布模式

requestdistribution=zipfian

2.3 测试

在ycsb根目录下执行脚本:

shell> ./bin/ycsb load mongodb -s -P workloads/workload_mongos -p mongodb.url=mongodb://172.16.18.73:20000/test1 –threads 100

1千万数据,插入三个分片,100个线程。插入时性能截图

[图片上传失败...(image-671c55-1589181294848)]

[图片上传失败...(image-b76002-1589181294848)]

结果:1000万入3个分片耗时1626s,平均6150条/s

[图片上传失败...(image-62301-1589181294848)]

3 hbase 性能测试

3.1创建表

在172.16.18.73服务器上,进入hbase:

shell> hbase shell

建测试表usertable:

hbase(main):001:0> n_splits = 200 # HBase recommends (10 * number of regionservers)
hbase(main):002:0> create 'usertable', 'cf', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}

3.2 ycsb-hbase配置文件

把ycsb-0.17.0.zip 包拷贝到172.16.18.73 /data 目录下

在workloads目录添加workload_hbase文件,内容如下:

recordcount=10000000

operationcount=1000

workload=site.ycsb.workloads.CoreWorkload

readallfields=true

readproportion=0

updateproportion=0

scanproportion=0

insertproportion=1

requestdistribution=zipfian

3.3 测试

在/data/ycsb-0.17.0目录下执行:

shell> ycsb-0.17.0]$ bin/ycsb load hbase20 -P workloads/workloada -cp /opt/module/hbase-2.0.0/conf/ -p table=usertable -p columnfamily=cf -p threads=100 -p clientbuffering=true -s

hbase四个子节点,执行时性能截图:

[图片上传失败...(image-c94c7b-1589181294848)]

结果截图:1000万数据,100个线程532s插入完成,平均18777条/s

[图片上传失败...(image-52edf7-1589181294848)]

三个hbase子节点,1000万数据,插入性能截图:

[图片上传失败...(image-6478b4-1589181294848)]

结果:1000万数据,100个线程,三个节点,插入时间708s,平均14124条/s

[图片上传失败...(image-d3ea81-1589181294848)]

两个节点,1000万数据,100个线程,执行性能截图

[图片上传失败...(image-f092e6-1589181294848)]

执行结果: 15分钟(由于中间做了hbase数据同步到es,hbase插入性能受影响,该任务没有执行结束,刚执行的时候系统预估15分钟), 11112/s

4 测试对比

1000万数据,


image.png

基本的存储需求两者都能满足,但是hbase可以跑在现有的Hadoop集群上,而mongodb需要额外的高性能服务器来部署,同等条件下hbase插入性能优于mongdb。

综上,选择使用hbase

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。