@blantcat

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

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

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

Насколько жизнеспособен такой подход? Подскажите, пожалуйста, может существуют паттерны для таких ситуаций, когда надо максимально быстро вытащить из бд информацию и раскидать по файлам.
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 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
при следующем запросе файл будет существовать и пхп скрипт уже не будет запускаться.
когда картинка становится не актуальна, например меняется, миниатюра будет удалена и при следующем запросе сгенерится снова актулаьная.

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

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

Похожие вопросы