Как максимально быстро инфомацию из бд записать в файлы?
Здравствуйте!
Задача: в таблице БД имеется более 7млн. записей. Необходимо выборки из этой таблицы записывать в файлы разных форматов (doс, txt, exсel). Выборки могут быть от сотни строк и до нескольких миллионов. В случае изменения записи в бд, нужно обновить и все файлы, в которых информация о данной записи встречалась (максимальное время задержки обновления - пару минут).
Решение данной задачи вижу в очередях. Т.е. создается задача в очереди на соответствующую выборку. Далее в задаче делается сама выборка порционно, по 1000 записей из бд и пишется в несколько файлов.
Насколько жизнеспособен такой подход? Подскажите, пожалуйста, может существуют паттерны для таких ситуаций, когда надо максимально быстро вытащить из бд информацию и раскидать по файлам.
а обновления в таблице у Вас тоже будет порционно? Если нет ( к примеру обновилась только одна строка) - то что делать? ждать еще 999 или обновлять файлы сразу?
Макс: С тригером попроще, а как вот как ускорить массовую выборку и последующую запись в файлы. Если порционно выбирать, мне кажется, не сильно шустро будет.
1. а надо ли писать всё в файлы? Какая пропорция чтения-записи?
Т.е. Вы сделали выборку, её часто будут читать потом, или 1-2 раза прочитают, и всё?
Каждый раз будут читать разными способами (форматами файлов) или как ?
2. Как долго надо хранить "историю".
На основе задачи видно что у вас через год жёсткий диск погрязнет в файлах, и фактически, что вы будет делать - так это чистить файлы :)
3. насколько тяжёлые "выборки" ?
4. зачем раскидывать по файлам? Может есть другие способы?
Если выборки не сложные, и после выборки файл читают всего несколько раз - то я бы не делал вообще экспорт в файлы.
Oleg: 1. Надо - таковы требования. Читают сторонние сервисы, мое дело записать. 2. Файлы хранить долго и в актуальном состоянии с базой, пока этим пользуются сервисы сторонние. 3. Выборки не тяжелые, но объемные - до миллиона записей. 4. Других способов нет, у разных сервисов разные требования к забору контента )
xml файл можно отдавать скриптом генерируя его динамически.
например урл site.com/file.xml
при запросе этого урла файла может не быть, а вебсервер запустит например php скрипт который сгенерирует и отдаст его как xml. также этот скрипт может кешировать файл, чтобы отдавать быстрее.
очень частая тактика например для кеширования миниатюр изображений.
например есть путь
site.com/media/thumbnail/150x200/4564564.jpg
при запросе по нему, если файла нет - запустится скрипт, сделает миниатуюру с запрашиваемым разрешением и положит в папочку по тому же пути /media/thumbnail/150x200/4564564.jpg
при следующем запросе файл будет существовать и пхп скрипт уже не будет запускаться.
когда картинка становится не актуальна, например меняется, миниатюра будет удалена и при следующем запросе сгенерится снова актулаьная.