Test MongoDB Oplog Tailing

外文参考链接:


http://blog.mongolab.com/2014/07/tutorial-scaling-meteor-with-mongodb-oplog-tailing/

在meteor 0.7.2的版本之前是采用poll and diff的方式来实现实时数据更新的,此种方法并没有真正达到实时更新,会有时间延迟(我测试时为每秒写入一条数据,但是meteor通过observechanges去监听游标拿到的数据并没有每一次做一次更新而是没10秒钟通过poll and diff的方式到数据库去做diff比较,然后跟新数据,也就是说10秒钟更新一次数据)。

接下来讲讲如何在本地测试oplog

1、下载源码

案例源码:https://github.com/Micjoyce/meteor-oplog-tailing-example

2、编译bundle

进入meteor-oplog-tailing-example目录:

meteor bundle ./meteor-oplog-tailing-example.tar.gz

tar xvfz meteor-oplog-tailing-example.tar.gz

3、运行程序

参考此篇文章,如何在centos上部署meteor应用

4、配置MongoDB Replica Set

参考下面文章

一分钟搭建mongodb架构Replica Set&Sharding—ttlsa教程系列之mongodb(七)

其中需要注意在此步骤需要注意一下问题

运行mongo --nodb时需要最好替换为运行sudo mongo --nodb取得管理员权限,不然运行 replicaSet.startSet() 会出现如下错误

Error: boost::filesystem::remove: Permission denied: "/data/db/testReplSet-0/_tmp"

at Function.MongoRunner.runMongod (src/mongo/shell/servers.js:589:13)

at ReplSetTest.start (src/mongo/shell/replsettest.js:689:44)

at ReplSetTest.startSet (src/mongo/shell/replsettest.js:258:21)

at (shell):1:12 at src/mongo/shell/servers.js:589

添加一个对local有读权限的用户

mongo localhost:30000/admin

cluster:PRIMARY> db.createUser({user: "oplogger", pwd: "PasswordForOplogger", roles: [{role: "read", db: "local"}]})

具体参考meteor官方文档Oplog Observe Driver

5、再次运行程序

配置环境

export  PORT=4000

export  ROOT_URL=http://localhost

export MONGO_URL=mongodb://localhost:30000/test

export MONGO_OPLOG_URL=mongodb://oplogger:PasswordForOplogger@localhost:30000,localhost:30001,localhost:30002/local?authSource=admin

运行程序(可以通过forever, pm2来运行)

对比图如下

Test MongoDB Oplog Tailing_第1张图片

可以输入一些数据,然后通过robomongo连接到数据库中,删除一些数据看页面的数据是否同时更新。(经测试立即同步)

unset MONGO_OPLOG_URL然后运行程序在此输入一些数据,继续通过robomongo做删除动作看是否同时更行。(会存在3-5s左右的延迟)


部署环境中其与测试环境中差异并不是很大,只不过在部署过程总需要注意如何配置MongoDB Replica Set,具体部署及其问题可参考

MongoDB副本集故障测试和解决方案

当需要使用多个数据库时需要注意在创建数据库连接中需要配置oplog mongodb数据库

具体见:Stack Overflow Questions Jobs Tags Users Badges Ask Question Using Multiple Mongodb Databases with Meteor.js

你可能感兴趣的:(Test MongoDB Oplog Tailing)