Сохранить результат из БД Query Rails - PullRequest
0 голосов
/ 19 марта 2012

У меня есть устаревшая база данных, у которой есть темпераментное (в лучшем случае) соединение.Данные в этой базе данных обновляются, возможно, раз в неделю.Пользователям моего приложения просто необходим доступ для чтения.

Проблема, с которой я сталкиваюсь, иногда заключается в том, что запросы к БД возвращают ноль, поэтому в моем приложении происходят всевозможные плохие вещи.

Есть лиКак я могу запросить базу данных, пока не получу действительный ответ, а затем сохранить этот ответ где-нибудь в моем приложении rails?Таким образом, сохраненная версия будет возвращена моим пользователям.Затем, возможно, один раз в неделю, я могу повторно запрашивать базу данных, пока она не вернет действительный объект?

Чтобы добавить к этому сложности, устаревшая база данных - это sql server, поэтому мне пришлось установить и использовать rails-sqlserver, который работает довольно хорошо, но может как-то добавить к проблеме.

1 Ответ

2 голосов
/ 19 марта 2012

Проблема, с которой вы столкнетесь, выполняя это в цикле запроса, состоит в том, что запрос, который фактически извлекал данные, вероятно, будет выполняться медленно с ледяной точки зрения (так как он должен будет запрашивать, пока результат не станет нулевым, что потенциально может занять некоторое время)так что ваши пользователи будут нажимать кнопку обновления и просто ставить в очередь больше запросов, пока ваш SQL-сервер или приложение не будут заполнены.

Если бы я сделал это, у меня, вероятно, была бы настроена задача Resque для извлечения всех данныхвам требуется (возможно, полный дамп базы данных) каждую неделю или каждый день.Сохраните полученные данные в хранилище данных: либо в вашу локальную базу данных, либо в что-то вроде redis или memcached, если вы не особенно заботитесь о постоянстве.Поскольку он асинхронный, вы можете использовать столько раз, сколько вам нужно для правильной выборки данных.Что касается вашего приложения, даже не пытайтесь подключиться к темпераментной базе данных;считать «среднюю» базу данных авторитетной по всем запросам.Поэтому, если там нет данных, предположим, что они также не существуют на сервере SQL.

Недостатком этого метода, конечно же, является то, что если на сервере SQL имеется очень большая база данных, выне могу просто скопировать все это в более стабильное среднее место.Вам нужно было бы выбрать подмножество данных или использовать метод кэширования для каждого запроса, как вы сами себе предложили ... но я не думаю, что это лучший способ сделать это, если вы можете избежать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...