@seowin555

Как лучше делать выборку?

Задача следующая - нужно максимально быстро и безопасно в плане нагрузки генерировать большое количество (около 1 млн.) html файлов на лету и сохранять их на диск.

Файлы генерируются на основе шаблона и строк текста. По 30-50 строк на файл.

Вопрос: откуда лучше делать выборку этих строк (можно подряд идущих) из БД или же из txt файла, чтобы скорость выборки и генерации была наиболее высокой и от нагрузки не падал сервер?

При генерации каждого файла - идет новая выборка этих 30-50 строк.
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 4
romy4
@romy4
Exception handler
1 млн файлов это уже плохо.
а) вы сильно нагрузите файловую систему, если неправильно распределите их. Например, в один каталог укладывать более 4к файлов убивает производительность
б) Вы исчерпаете все inode и встанет вообще всё.

Храните их в какой-нибудь nosql или в той же любимой бд.
Ответ написан
Комментировать
bingo347
@bingo347
Crazy on performance...
Если выборка строк идет по какому-то критерию из общего списка - то однозначно БД, если это просто свой набор строк для каждой страницы, то можно и из файла дергать (при условии, что для каждой страницы свой файл - это будет быстрее)

Так же, у Вас в теге стоит php, вероятно не лучшее решение, если нужно действительно быстро, посмотрите в сторону чего-либо с асинхронным IO (например node.js или go) это позволит обработке не ждать сохранения данных на диск и получения данных из БД
Ответ написан
Комментировать
Если я правильно понял то ситуация следующая:
ты хочешь создать около млн файлов в каждом по 30-50 строк. Если ты будешь в файл пихать из БД запись, то получается нужно млн запросов к БД. Если сразу их вытянуть одно выборкой, то эт тож не вариант.
Бд от такого количества запросов просто ляжет
Лучше это все в файле держать и построково считывать.
Ответ написан
Комментировать
@seowin555 Автор вопроса
Строки абсолютно рандомные. Единственное требования, чтобы в пределах одного файла строки не повторялись. В пределах разных файлов могут повторяться.

База или файл одна/один (не для каждой страницы свой)

------------

udp

В общем, задача сейчас больше свелась к тому, как ускорить процесс генерации.

Понял, что создавать 100500 html файлов на сервере не очень хорошая затея, решил, что лучше помещать все в SQLLite базу. И потом уже генерировать страницу на лету на основе шаблона.

Вообще, цель всего этого - генерация страниц для сайтов. Т.е. каждый сайт будет иметь 250к - 1кк страниц.

Встает вопрос, как ускорить процесс записи в SQLLite базу (для каждого сайта база своя) и не положить сервер, если за раз мы генерим, скажем, 50 сайтов.

Как я предполагаю, поочередно производить запись в лайт-базу для каждого сайта будет очень долго.

Т.е. получается такая схема:
Есть SQL база под управлением MySQL. В ней несколько таблиц. В каждой таблице 1кк-3кк строк.

Необходимо сгенерировать 50 сайтов за раз, в каждом сайте по 250к - 1 кк страниц.

Для каждой страницы идет выборка из нескольких таблиц SQL базы, текст обрабатывается и записывается в SQlLite базу каждого сайта.

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

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

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