【问题标题】:How do I confirm I am reading the data from Mongo secondary server from Java如何确认我正在从 Java 的 Mongo 辅助服务器读取数据
【发布时间】:2021-12-10 17:14:45
【问题描述】:

为了性能优化,我们正在尝试从 Mongo 辅助服务器读取选定场景的数据。我正在使用使用“withReadPreference(ReadPreference.secondaryPreferred())”的内联查询来读取数据,PFB 代码为 sn-p。

在执行突出显示的内联查询后,我想确认我们获取的数据来自辅助服务器,是否有任何方法可以从 Java 或 Springboot 中检查相同的数据

公共用户读取(最终字符串 userId){ final ObjectId objectId = new ObjectId(userId);

    final User user = collection.withReadPreference(ReadPreference.secondaryPreferred()).findOne(objectId).as(User.class);
    
    
    
    return user;
}

【问题讨论】:

    标签: mongodb jongo


    【解决方案1】:

    在 Java 中的方式几乎相同。注意我们使用secondary() 而不是secondaryPrefered();这保证仅从辅助读取:

    import com.mongodb.ReadPreference;
    
    {
        // This is your "regular" primaryPrefered collection:
        MongoCollection<BsonDocument> tcoll = db.getCollection("myCollection", BsonDocument.class);
        //  ... various operations on tcoll, then create a new
        //  handle that FORCES reads from secondary and will timeout and
        //  fail if no secondary can be found:
        MongoCollection<BsonDocument> xcoll = tcoll.withReadPreference(ReadPreference.secondary());
    
        BsonDocument f7 = xcoll.find(queryExpr).first();
    }
    

    【讨论】:

    • 感谢您的回复我同意超时,如果找不到辅助服务器则失败。我如何确保从辅助服务器读取数据。是否有任何方法可用于获取服务器/主机名。我试过下面的代码,但它给了我空指针。
    • collection.withReadPreference(ReadPreference.secondaryPreferred()).getDBCollection().find().getServerAddress().getHost();
    • 只有在读取首选项为Secondary 时,您才能从辅助节点获取数据。你还需要什么其他保证?另请注意,在多节点代表集中,可能有多个辅助节点,并且无法保证会命中哪个节点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多