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