1、背景

    我们需要实时抽取MongoDB数据到数仓中,除了循环tailing oplog之外,MongoDB3.6版本之后增加了change stream的功能,两种方式的对比网上可以找到,我们这里需要在MongoDB的update时可以获取整条记录而不是发生变更的字段,所以我们使用了change stream支持的 fullDocument: "updateLookup" 选项 ,当我们通过change stream获取一批事件时,MongoDB如果有update时会查一下数据库把整条记录返回,所以这里要评估这个选项对MongoDB数据库的性能影响。

2、压测工具及方法

  • 地址:https://github.com/brianfrankcooper/YCSB/
  • 下载
curl -O --location https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz
tar xfvz ycsb-0.17.0.tar.gzcd ycsb-0.17.0

 

  • 建立测试数据库
  • 创建压测配置文件,在load和transaction两个阶段属性文件共享
mongodb.url=mongodb://172.172.177.11:27017/test?w=0
workload=site.ycsb.workloads.CoreWorkload
recordcount=2000000
operationcount=5000000
readallfields=true
readproportion=0.7
updateproportion=0.3
scanproportion=0
insertproportion=0
requestdistribution=zipfian

 

  • 执行YCSB命令
./bin/ycsb load mongodb -s -threads 100 -P workloads/2000w -p mongodb.url=mongodb://172.172.177.11:27017/test?w=0

 

./bin/ycsb run mongodb -s -threads 100 -P workloads/2000w -p mongodb.url=mongodb://172.172.177.11:27017/test?w=0

 

3、压测结果分析

MongoDB数据库压测总结_数据库

MongoDB数据库压测总结_MongoDB_02

通过有change stream的fullDocument: "updateLookup" 参数和没有change stream参数,分析发现结果无明显差异,总结出打开change stream的fullDocument: "updateLookup"无影响