Ruby Mongoid 3和Mongodb为特定查询查询二级数据库
我有一个配置了3个副本的mongodb replicaset。我的配置是Ruby Mongoid 3和Mongodb为特定查询查询二级数据库,ruby,mongodb,replication,mongoid3,Ruby,Mongodb,Replication,Mongoid3,我有一个配置了3个副本的mongodb replicaset。我的配置是 staging: sessions: default: hosts: - xx.x.x.xxx:27017 - xx.x.x.xxx:27017 - xx.x.x.xxx:27017 database: mongoid_staging options: consistency: strong options
staging:
sessions:
default:
hosts:
- xx.x.x.xxx:27017
- xx.x.x.xxx:27017
- xx.x.x.xxx:27017
database: mongoid_staging
options:
consistency: strong
options:
allow_dynamic_fields: false
identity_map_enabled: true
include_root_in_json: false
include_type_for_serialization: true
由于strong
的一致性,此配置将确保我的所有写操作和读操作始终指向主操作。如何将特定的读取查询路由到辅助服务器
或者换一种方式说,如何确保某些读取只从主服务器执行
我使用的是Mongoid 3.0.0和Mongodb 2.2.6。这可能吗?这篇文章说它可以用Mongoid 3完成,但我找不到任何东西告诉我如何-
第二个问题:
一个单独的应用程序能否连接到复制集中的一个二级副本,并将其用作其独立的主副本?首先,我认为您了解读取和写入不同副本的后果。你不能保证很强的一致性。这意味着你在中学阅读的内容可能不是最新的。在同一个过程中从不同的复制副本执行读写操作使其更具挑战性 还请注意,不应使用辅助设备作为卸载主设备的方式。危险在于,如果主电源发生故障,辅助电源可能无法承受全部负载 我不喜欢ORM,尤其是MongoDB,如果使用Ruby这样支持Map/Hashes/Dicts的语言,我就更不喜欢ORM了。使用ORM会使您对MongoDB的操作失去很多控制,并显示出较弱的性能 MongoDB的原生Ruby驱动程序能够为读写操作选择首选源。这被称为“阅读偏好”,您可以在以下网址阅读更多关于此主题的内容:
https://github.com/mongodb/mongo-ruby-driver/wiki/Read-Preference
http://docs.mongodb.org/manual/core/read-preference/
我不熟悉Mongoid,但您可能希望尝试以与Ruby驱动程序类似的方式向“find()”传递额外的参数。例如,对“find()”的调用如下所示:
find({:doc => 'foo'}, :read => :secondary)
关于你的第二个问题,即使用中学作为小学:这是不可能的。
mongod
服务器只能有一个活动角色,并且不能是多个副本集的一部分。