如果表已更新,请观察MongoDB并相应地执行操作

时间:2015-08-06 10:02:55

标签: ruby-on-rails mongodb database

因此,我正在使用mongodb作为数据库在Rails中开发应用程序。因此,这个mongodb作为其他3个网站的通用数据库。

现在,我的问题是我还有另一个MySQL数据库(我知道,我的数据到处传播!!)每当这个mongodb数据库更新时,我也想更新MySQL数据库。基本上,我想观察mongodb数据库中的任何更改,并反映对MySQL的相同更改。

告诉我一个完成此任务的方法。万分感谢。 :)

1 个答案:

答案 0 :(得分:1)

我找到了一个满足我需求的精确解决方案:

使用名为“MongoRiver”的宝石:https://github.com/stripe/mongoriver

mongo = Mongo::MongoClient.from_uri(mongo_uri)
tailer = Mongoriver::Tailer.new([mongo], :existing)
outlet = YourOutlet.new(your_params)
stream = Mongoriver::Stream.new(tailer, outlet)
stream.run_forever(starting_timestamp)

在YourOutlet.rb中,您定义了一个在gem中扩展Outlet类的类,并定义了诸如after_insert,after_update,before_insert,before_update等事件,并且它们将相应地执行。

所以,它的工作原理很简单:正如评论中提到的那样,你必须在MongoDB中启用Oplog。并设置适合您需要的oplog大小,通常为1 GB。

在此处阅读:http://docs.mongodb.org/manual/tutorial/deploy-replica-set/