2017-01-09 8 views
0

У меня есть приложение Rails/ActiveRecord, которое иногда выполняет некоторые тяжелые запросы только для чтения по сравнению с моделями приложения для ad-hoc администрирования/отчетности. В настоящее время я отправляю эти запросы в отдельную конечную точку базы данных для чтения-реплики с использованием драгоценного камня seamless_database_pool, поэтому эти запросы не добавляют нагрузку на основную базу данных. Однако эта настройка добавляет постоянную зависимость времени выполнения от реплики, уменьшая доступность моего приложения - всякий раз, когда реплика отправляется в автономный режим для обслуживания, весь сайт возвращает 503 ошибки на любой запрос, хотя большинство запросов никогда не запрашивает read-replica вообще ,ActiveRecord читает реплику для запросов к отчетности

Как подключиться к считываемой реплике для специальных запросов отчетов на моделях ActiveRecord, не влияя на доступность моего приложения? Есть ли другой блок-адаптер для баз данных, который явно обрабатывает этот прецедент?

Или, (еще лучше) можно ли выполнить это напрямую с помощью ActiveRecord? Я знаю, что можно подключиться к отдельной базе данных, позвонив #establish_connection, чтобы направить конкретную модель в отдельную базу данных по всем всем действиям контроллера, но для моего варианта использования мне нужно подключиться к отдельной базе данных через все моделей, но только для конкретных действий контроллера.

ответ

0

Мне удалось обойти эту проблему, изменив драгоценный камень seamless_database_pool, чтобы уменьшить зависимость времени выполнения от чтения-реплики, когда используется только основное соединение. См. Соответствующие issue и PR.