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

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

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

При генерации каждого файла - идет новая выборка этих 30-50 строк.

Guest
Как часто нужно это делать?
Если один раз – то абсолютно не важно как это делать.
seowin
30-50 раз подряд по 250к - 1млн файлов.

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

Ну лучше всего из какого-нибудь in-memory хранилища. Типа Redis.
Из БД (MySQL видимо) и из файла тоже можно в принципе. Можно доставать строки не перед кадой генерацией файла (по 30-50), а доставать по 300-500 и генерировать 10 файлов...
seowin
В общем, задача сейчас больше свелась к тому, как ускорить процесс генерации.

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

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

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

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

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

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

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

Как лучше оптимизировать все это дело, чтобы и скорость была максимально возможной, и в тоже время сервер не падал?
Игорь_Vasinsky
я предлагаю за такие сайты - ставить к стенке.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Valick
Игорь_Vasinsky, а сложить 2+2 не? smile.gif

большое количество (около 1 млн.) html файлов + seowin


_____________
Стимулятор ~yoomoney - 41001303250491
icedfox
seowin, по моему мнению вы начинаете смотреть не с той стороны на проблему.
В вашем текущем варианте выборка из базы для 1 млн файлов не самое большое зло, у вас все может упереться в запись/чтение диска.

Как бы я начал делать в вашем случае.
1. делаю карту сайта с линками и кормлю ее ПС.
2. При открытии страницы проверяем наличие файла, если нет, то делаем запрос к базе и создаем файл для страницы , затем его отдаем.

Вот и все. По факту это называется кеширвоание wink.gif В вашем случае это уход от проблемы с мгновенной нагрузкой на сервер. файлы будут создаваться постепенно. по мере обращения к ним.

П.С. SQLLite не лучшее решение для ваших задач.
seowin
Цитата (icedfox @ 27.11.2015 - 18:07)
seowin, по моему мнению вы начинаете смотреть не с той стороны на проблему.
В вашем текущем варианте выборка из базы для 1 млн файлов не самое большое зло, у вас все может упереться в запись/чтение диска.

Как бы я начал делать в вашем случае.
1. делаю карту сайта с линками и кормлю ее ПС.
2. При открытии страницы проверяем наличие файла, если нет, то делаем запрос к базе и создаем файл для страницы , затем его отдаем.

Вот и все. По факту это называется кеширвоание wink.gif В вашем случае это уход от проблемы с мгновенной нагрузкой на сервер. файлы будут создаваться постепенно. по мере обращения к ним.

П.С. SQLLite не лучшее решение для ваших задач.

Спасибо за совет.

Но тут есть 2 проблемы:
1. Важно, чтобы в момент захода пользователя/бота на страницу, страница открывалась как можно быстрее

2. Если скрормить карту сайта боту ПС, получается то же самое, что если бы я генерил страницы до того, как скармливать их боту.

Так как бот будет переходить по ссылкам и страницы также будут генерироваться. Да и к тому же с задержкой.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.