Здравствуйте.
Есть скрипт, на PHP, который парсит данные 9 различных сайтов. Далее заносит полученные данные в базу SQLite. А затем пользователь открывает сайт и смотрит данные из базы.
Есть возможность скрипт разбить на части, скажем на 3 скрипта, чтобы он парсил по 3 сайта каждый. Среднее выполнения скрипта на одном сервере когда он парсит разом 9 сайтов ~4.1 секунды. Для меня это долго. Справочно: данные которые подругражаются с сайтов не более 1мб. В сумме 9мб максимум.
Итак.
Есть 5 серверов под управлением Windows Server. Названия условные.
s1
s2
s3
main
database
Они соединены в локальную сеть между собой и каждый имеет публичный IP.
Моя идея следующая:
Скрипт парсинга разбить на части. Тоесть, s1 будет получать данные с трех сайтов s2 с трех сайтов и s3 соответственно с трех сайтов.
Полученные данные они будут заносить в базу SQLite на сервер database.
А сервер main, где собственно и размещен сайт, уже получать данные с сервера database и выдавать пользователю.
Теперь вопрос.
Какое ваше мнение касательно данной идеи? Бред?
Может нет смысла заморачиваться из за 9мб, и использовать какую-то потоковую загрузку на одном сервере? Если да, что можете порекомендовать?
на редкость невнятный вопрос. какой-то виндоус на коленке. sqlite. При чем здесь windows server? При чем здесь "сеть хранения данных"? это файлик с мегабайтом натасканных с интернета циферок?
А, главное - если есть возможность, то что мешает взять да попробовать?
Роман Юрьевич Ипатьев, Теперь вопрос.
Какое ваше мнение касательно данной идеи? Бред?
Может нет смысла заморачиваться из за 9мб, и использовать какую-то потоковую загрузку на одном сервере? Если да, что можете порекомендовать?
мне кажется, я этот абзац уже читал
но кстати да, "потоковая загрузка" - это явно ещё один термин, смысл которого вы тоже, судя по всему, не понимаете.
Роман Юрьевич Ипатьев, ну простите меня. Я ученик. Мне всего-лишь нужна помощь, поэтому я и здесь. Попробовать то можно, но это займет для меня не мало времени. Может есть пути решения моей задачи намного быстрее.
Касательно тегов к вопросу.
Давайте проще. Поставлю вопрос по другому. Мне надо очень быстро загрузить на сервер с 9 разных сайтов JSON массивы каждый из которых весит 1 мб.
Я работаю с PHP, а на моих серверах стоит Windows Server и мне предпочтительно использовать SQLite так как фреймворк сайта работает с ним.
Роман Юрьевич Ипатьев, я уже попросил прощения, перед вами, за то что, эти мерзкие теги так вас раздражают.
А на ваш взгляд, какие теги нужно было указать? На будущее, подскажите, пожалуйста.
Вот читаю и не могу понять на кой черт тут разные сервера? В чем проблема разбить выполнение на треды и пустить хоть 1000 независимых скриптов на одном сервере?
nevesomostjke, что такое тренды - гугл. У пхп нет своей реализации многопоточности, как делаем мы: команда 1 создает треды, пишет в бд. Вторая команда принимает на вход номер треда и постоянно смотрит в бд что бы узнать появились ли записи для этого треда. Последняя команда висит в супервизоре (он запускает ее в столько потоков во сколько нужно). Реализаций тредов куча, интернеты в помош.
nevesomostjke, в такой схеме лучше использовать MySQL. Необходимость такой схемы - вопрос отдельный. Вы профилировали выполнение скрипта, определяли узкие места? Откуда уверенность, что нужно разность его по разным хостам?
Сергей Горностаев, нет уверенности. Поэтому и задал вопрос. Стоит ли так делать.
Просто данные для одного сайта я получаю в среднем за ~0.4 секунды, интернет очень быстрый. Это время выполнения всего скрипта с моими там функциями всякими на PHP. Разборы JSON массивов и так далее...
А когда разом получаешь данные с 9 сайтов, то время выполнения в среднем ~4.1
Не совсем понятно, почему именно для вас 4,1 секунды - это долго, какие вообще требования закладываются? Как вариант предлагаю рассмотреть след. конфигурацию:
Разбить скрипт на 2: Первый будет делать запрос на ваши сайты, получать ответ и сохранять в спец. таблицу. Второй будет брать новые данные из этой таблицы, запускать нужный обработчик, разбирать сохраненный ответ и обновлять нужные вам данные в бд. В общем классические очереди (гуглить по словам php queue, php jobs)
Преимущества:
1. Разделены получение и обработка данных
2. Каждую часть скрипта можно отдельно модифицировать (например, получение через параллельные запросы)
3. Обработчиков очереди можно делать столько сколько вам нужно
4. При увеличении кол-ва сайтов время выполнения одного запроса не изменится.
Необходимо отображать данные пользователю каждые 2 секунды.
Сейчас уже пришел к решению использовать curl_multi.
Время загрузки данных сократилось с 4.1 сек до 1.8 сек.