gpt4 book ai didi

mongodb - 使用 MongoTemplate 时是否可以动态设置特定查询的读取首选项?

转载 作者:行者123 更新时间:2023-12-05 08:06:17 36 4
gpt4 key购买 nike

在我们的应用程序中,我们管理许多 MongoTemplate 实例,每个实例代表一个客户端数据库。对于大多数数据库操作,我们希望使用 secondaryPreferred 读取首选项,以便利用集群的只读副本和分配负载。但是,至少在一种情况下,我们需要从主节点读取以获取最新数据。我看不到任何方法可以覆盖此单个查询的读取首选项。我看到 this issue在 JIRA 板上,但它已经开放了 6 年,并且关联的 StackOverflow 链接已失效。假设不会实现,我正在尝试找出一些替代解决方案。这看起来像是对可能选项的正确评估吗?

  1. 创建两个具有不同读取首选项的 MongoClient,并使用它们创建一组单独的 MongoTemplate 用于主要读取和次要读取。我担心这可能会创建双倍数量的集群连接(尽管如果额外的连接都转到辅助节点,这可能不是问题)。
  2. 使用 MongoTemplate.setReadPreference() 方法在执行操作之前临时更改读取首选项,然后在完成后重置它。然而,这似乎很容易受到竞争条件的影响。
  3. 避开 Spring Data 框架并直接使用 executeCommand(),它支持 readPreference 参数。这意味着我们将失去 Spring Data 的所有优势和抽象,而不得不直接操作 BSON 对象。
  4. Query 类有一个 slaveOk() 方法,但这与我正在寻找的相反,它似乎已被弃用。

如有任何进一步的信息,我们也将不胜感激。谢谢!

最佳答案

作为变通解决方案,我们可以覆盖方法 prepareCollection(MongoCollection<Document> collection)在 MongoTemplate 中(引用:here)并单独更改所需查询的读取首选项,让其余情况遵循默认读取首选项

关于mongodb - 使用 MongoTemplate 时是否可以动态设置特定查询的读取首选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61511130/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com