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万数据,
基本的存储需求两者都能满足,但是hbase可以跑在现有的Hadoop集群上,而mongodb需要额外的高性能服务器来部署,同等条件下hbase插入性能优于mongdb。
综上,选择使用hbase