外文参考链接:
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来运行)
对比图如下
可以输入一些数据,然后通过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