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、压测结果分析
通过有change stream的fullDocument: "updateLookup" 参数和没有change stream参数,分析发现结果无明显差异,总结出打开change stream的fullDocument: "updateLookup"无影响