Возможно ли использовать MongoTemplate для динамической установки предпочтений чтения для определенного запроса? - PullRequest
0 голосов
/ 29 апреля 2020

В нашем приложении мы управляем несколькими экземплярами MongoTemplate, каждый из которых представляет клиентскую базу данных. Для большинства операций с базами данных мы хотим использовать предпочтение чтения secondaryPreferred, чтобы использовать реплики чтения нашего кластера и распределить нагрузку. Однако, по крайней мере, в одном случае нам нужно прочитать с первичной, чтобы получить самые последние данные. Я не вижу способа переопределить предпочтения чтения для этого отдельного запроса. Я вижу эту проблему на плате JIRA, но она была открыта в течение 6 лет, и связанная ссылка StackOverflow устарела. Предполагая, что это не будет реализовано, я пытаюсь найти некоторые альтернативные решения. Похоже ли это на правильную оценку возможных вариантов?

  1. Создайте два MongoClient с различными предпочтениями чтения и используйте их для создания отдельного набора MongoTemplate для основного и дополнительного читает. Я обеспокоен тем, что это, вероятно, приводит к удвоению количества подключений к кластеру (хотя, возможно, это не проблема, если все дополнительные подключения go к вторичным).
  2. Используйте метод MongoTemplate.setReadPreference() для временно измените предпочтения чтения перед выполнением операции, затем сбросьте ее после завершения. Однако, похоже, что это будет уязвимо для условий гонки.
  3. Обходите фреймворк Spring Data и используйте executeCommand() напрямую, который поддерживает аргумент readPreference. Это означает, что мы потеряем все преимущества и абстракцию Spring Data и должны будем напрямую манипулировать объектами BSON.
  4. В классе Query есть метод slaveOk(), но это противоположно тому, что я Я ищу, и кажется, что он устарел.

Любая дополнительная информация также приветствуется. Спасибо!

...