Дмитрий И.
7 сообщений
#17 лет назад
Была идея скачать базу данных с нескольких иностранных сайтов и предоставить ее на русском. Но появилась проблемма, когда прикинули сколько эта база займет места.
Поэтому есть вторая идея сделать на нашем сайте систему поиска по запросу . Клиент вводит необходимые характеристики товара, с нашего сайта посылаеться запрос на несколько сайтов оттуда скачивает инфо с описанием и фото и предоставляет их на нашем сайте с переводом. Один вопрос сколько такой запрос будет обрабатываться ? Тоесть сколько времени понадобиться с момент когда клиент нажал найти до момента когда он получит список товаров с инфо на экране .
Программе необходимо пройти по ссылке на сайт, если необходимо занести регистрационные данные (имя пользователя и пароль ) занести в их поисковик данные такие как марка модель и год например . Получить результат и закачать его на наш сайт попутно переведя.

Как быстро это может работать? 5 -30сек или же речь о десятках минут ? И от чего скорость работы такой программы будет зависеть?
Александр С.
1 сообщение
#17 лет назад
Цитата ("dizi"):
И от чего скорость работы такой программы будет зависеть?

Впервую очередь от скорости соединения с сайтами (и их ответа), к которым будет запрос. Я думаю, это будет решающим фактором, все остальные моменты (скорости) будут незначительны по сравнению с этой. А по времени можно установить экспериментально.
Андрей Халецкий
3563 сообщения
#17 лет назад
ausmirnov, это правильный ответ.
В таких системах основное время занимает не обработка данных а их получение.

dizi, можете связатся со мной, есть опыт таких работ.
Раду М.
159 сообщений
#17 лет назад
Используй асинхронные вызовы, заметно ускорит получение данных с нескольких сайтов одновременно. Не знаю, есть ли фича в PHP (сомневаюсь), но если разработка на .NET или Java точно есть.
Вадим Т.
3240 сообщений
#17 лет назад
Цитата ("Shevron"):
Используй асинхронные вызовы, заметно ускорит получение данных с нескольких сайтов одновременно. Не знаю, есть ли фича в PHP (сомневаюсь), но если разработка на .NET или Java точно есть.


В PHP под Unix/Linux давно уже есть pcntl. А начиная с PHP 5 в том числе и CURL может работать в multi mode. Но конечно, PHP не идеальный инструмент для таких задач. Намного лучше использовать Perl. Также Java или .NET можно, но подавляющее большинство хостингов не поддерживают их (разве что на своем дедике насетапить). А вот Perl - почти все поддерживают.

Цитата ("dizi"):
Как быстро это может работать? 5 -30сек или же речь о десятках минут ? И от чего скорость работы такой программы будет зависеть?


Да никак тут быстрее не сделать если обращаться к стороннему ресурсу. Максимум - это кешировать у себя результаты запросов. Если запросы повторяющиеся, то может существенно помочь. Но если запросы повторяются крайне редко, то не поможет.

В общем, если хотите еще немного ускорить - займитесь исследованием запросов, которые ожидаются... может быть можно как-то прогнозировать последующие запросы, которые предположительно сделает пользователь после предыдущего запроса (например: если пользователем выбрана страница N1, то, если с вероятностью 20% затем им выбирается страница N2, тогда ее можно сразу асинхронно тянуть вместе с запросом N1, и пока положить в кеш, и т.д.)
 A.
120 сообщений
#17 лет назад
Tvv
както вы ловко смешали pcntl c curl ... PHP не идеальный инструмент для таких задач - а вот это еще почему, если не секрет?
Вадим Т.
3240 сообщений
#17 лет назад
Цитата ("Andreika"):
tvv
както вы ловко смешали pcntl c curl ... PHP не идеальный инструмент для таких задач - а вот это еще почему, если не секрет?


Ничего я не смешивал, пожалуйста читайте мое сообщение внимательнее.

Pcntl - это один способ добиться асинхронной работы в PHP. Работает только в Unix/Linux, да и то если текущая сборка PHP это поддерживает. Причем, по наблюдениям, работает недостаточно надежно. Multi CURL - это абсолютно другая фича, доступная начиная с PHP5. Позволяет делать асинхронные запросы к remote источникам в рамках текущего потока. По опыту использования, она работает вполне надежно, хотя данный способ практически не документирован, и разработчиками отмечен как experimental.

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

В отличие от PHP, Perl (Java, .NET, также в конце концов С/С++) отлично работают с параллельными потоками, есть уже наработанные и проверенные годами решения.
Вадим Т.
3240 сообщений
#16 лет назад
А вот и решение проблемы:

Эта библиотека классов сделана на базе MULTI CURL, но имеет дополнительные фичи:
- мультисессий может быть ограниченное программистом количество;
- результат можно получать не когда стянутся все закачки, а сразу, по мере скачивания хоть одной из них;
- можно ограничивать размер закачек.

К примеру, можно стартовать 100 закачек в 2 параллельных потока, скачивая только первые 100 Kb в каждой закачке.

Прошу прощения, за небольшой самопиар.
Михаил A.
54 сообщения
#16 лет назад
Цитата ("tvv"):
А вот и решение проблемы:

Эта библиотека классов сделана на базе MULTI CURL, но имеет дополнительные фичи:
- мультисессий может быть ограниченное программистом количество;
- результат можно получать не когда стянутся все закачки, а сразу, по мере скачивания хоть одной из них;
- можно ограничивать размер закачек.

К примеру, можно стартовать 100 закачек в 2 параллельных потока, скачивая только первые 100 Kb в каждой закачке.

Прошу прощения, за небольшой самопиар.


Можно узнать в чем проблема?
Говорить ошибку на 49 строке в коде класса

ПРостите за оффтоп
Вадим Т.
3240 сообщений
#16 лет назад
Цитата ("aligator"):
Можно узнать в чем проблема?
Говорить ошибку на 49 строке в коде класса

Простите, а что имеете в виду? Какую ошибку? Не понял мысли.