0

如果我想在我的数据库上调用 fsync + lock 方法,有没有办法在 Rails 应用程序中使用 Mongoid 来做到这一点?还有一种方法可以只指定我想要执行此操作的副本节点吗?

我正在尝试创建一个 rake 任务以使用 cron 每晚执行备份。

4

1 回答 1

1

Mongoid 2 使用 10gen 支持的驱动程序。Mongoid::Config.master.connection 对应于类 Mongo::MongoClient 的连接对象(原为 Mongo::Connection)。这个类有一个实例方法锁!执行 fsyncLock 命令,然后解锁!是它的伴侣。

http://api.mongodb.org/ruby/current/Mongo/MongoClient.html#lock!-instance_method

http://api.mongodb.org/ruby/current/Mongo/MongoClient.html#unlock!-instance_method

这些方法没有选项来指定副本集的成员,只能通过基本上供内部使用的套接字。因此,如果您需要 fsyncLock 特定的副本集成员,我建议您通过显式连接显式连接到它,例如 Mongo::MongoClient.new(host, port)。

client = Mongo::MongoClient.new(host, port)
client.lock!
# ...
client.unlock!
client.close

Mongoid 3 使用 Moped 而不是 10gen 驱动程序。但是即使您迁移到 Mongoid 3,您仍然可以独立使用 10gen 驱动程序来执行您的 rake 任务。

我对您的结果和任何后续问题感兴趣。

于 2012-11-28T20:56:24.690 回答