-->

如何更喜欢在MongoDB中读取二级(How to prefer reads on secondar

2019-08-08 18:18发布

当在副本集配置(1个仲裁器,1个初级,2个从站)使用的mongodb; 我怎么设置,上面写着对次级执行只留下主要用于写的偏好? 我使用MongoDB的2.0.4与吗啡。 我看到有一个slaveOk()方法,但我不知道如何工作的。

吗啡http://code.google.com/p/morphia/

详细信息我蒙戈设置与以下选项:

mongo.slaveOk();
mongo.setWriteConcern(WriteConcern.SAFE);

我试图用下面的(这可能是-btw回答):

Datastore ds = getDatastore();
Query<MyEntity> query = ds.find(MyEntity.class).field("entityId").equal(entityId);
query.queryNonPrimary(); // appears equivalent to ReadPrefererence.secondary()
MyEntity entity = query.get();

Answer 1:

正确答案,多血和汗水后如下:

  • 喜欢所有读取/查询命中次级,只有需要设置
  • 宁愿选择只使用读取次级,不设置并使用改为每查询

这也是一个很好的做法使用副本集的时候,像这样设置适当的写入关注:

  mongo.setWriteConcern(WriteConcern.REPLICAS_SAFE); 



Answer 2:

如此看来,目前的方法(按照Java驱动程序2.8+)是做

MongoOptions options = new MongoOptions();
options.setReadPreference(ReadPreference.secondaryPreferred());

然后

mongo = new com.mongodb.Mongo(Arrays.asList(address1, address2), options);

这将使使用次级所有连接比较喜欢,但将使用的主作为一个备份,如果在二次关闭或不可用的某些原因。



Answer 3:

使用“次要”阅读偏好http://www.mongodb.org/display/DOCS/Read+Preferences+and+Tagging+in+The+Java+Driver

“继发性:从辅助节点上阅读,如有,否则错误。”



Answer 4:

对于Java驱动程序3.6方法现在

    MongoClientOptions l_opts =
            MongoClientOptions
            .builder()
            .readPreference( ReadPreference.secondary() )
            .build();

    ServerAddress l_addr = new ServerAddress( "localhost", 27017 );

    try
    (
            MongoClient l_conn = new MongoClient( l_addr, l_opts );
    )
    {
       ...


文章来源: How to prefer reads on secondaries in MongoDb