Ruby Mongoid 3和Mongodb为特定查询查询二级数据库

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

我有一个配置了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:
    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
服务器只能有一个活动角色,并且不能是多个副本集的一部分。