@blantcat

Как максимально быстро инфомацию из бд записать в файлы?

Здравствуйте!
Задача: в таблице БД имеется более 7млн. записей. Необходимо выборки из этой таблицы записывать в файлы разных форматов (doс, txt, exсel). Выборки могут быть от сотни строк и до нескольких миллионов. В случае изменения записи в бд, нужно обновить и все файлы, в которых информация о данной записи встречалась (максимальное время задержки обновления - пару минут).

Решение данной задачи вижу в очередях. Т.е. создается задача в очереди на соответствующую выборку. Далее в задаче делается сама выборка порционно, по 1000 записей из бд и пишется в несколько файлов.

Насколько жизнеспособен такой подход? Подскажите, пожалуйста, может существуют паттерны для таких ситуаций, когда надо максимально быстро вытащить из бд информацию и раскидать по файлам.
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 2
sgjurano
@sgjurano
Разработчик
Вам придется держать где-то множества файлов, зависящих от каждой конкретной строки. При её обновлении, обновлять соответствующее множество файлов.

Если обновляется сразу несколько строк, то брать пересечение.

Задачи обновления файлов действительно можно делать через очередь с фиксированной пропускной способностью и возможно stable timer-ом.
Ответ написан
Комментировать
riky
@riky
Laravel
xml файл можно отдавать скриптом генерируя его динамически.
например урл site.com/file.xml
при запросе этого урла файла может не быть, а вебсервер запустит например php скрипт который сгенерирует и отдаст его как xml. также этот скрипт может кешировать файл, чтобы отдавать быстрее.

очень частая тактика например для кеширования миниатюр изображений.
например есть путь
site.com/media/thumbnail/150x200/4564564.jpg
при запросе по нему, если файла нет - запустится скрипт, сделает миниатуюру с запрашиваемым разрешением и положит в папочку по тому же пути /media/thumbnail/150x200/4564564.jpg
при следующем запросе файл будет существовать и пхп скрипт уже не будет запускаться.
когда картинка становится не актуальна, например меняется, миниатюра будет удалена и при следующем запросе сгенерится снова актулаьная.

думаю для вас это тоже будет лучший выход
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы