PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 9
roxoman Отправлено: 11 Января, 2016 - 16:30:40 • Тема: Sphinx и индексация • Форум: Работа с СУБД

Ответов: 1
Просмотров: 842
Никто с подобной задачей не сталкивался?
roxoman Отправлено: 04 Января, 2016 - 23:03:35 • Тема: Параллельная отправка запросов к нескольким удаленным серверам • Форум: Работа с сетью

Ответов: 5
Просмотров: 1902
Мелкий пишет:
Поковыряйте nuSOAP.

Кстати, может быть проще воспользоваться концепцией модных нынче микросерверов.
0) Сделайте своё универсальное API, с которым вам будет удобно работать.
1) Это апи опрашивайте мультикурлом
2) Сделайте для каждого стороннего API свой микропроект, который будет получать задание по вашему внутреннему api, и только этот микропроект будет знать и использовать реальное api этого стороннего проекта.


teddy пишет:
roxoman пишет:
как вручную построить этот XML-запрос (у каждого веб-сервиса же он разный)

Сначала просто обратитесь к этим сервисам через SoapClient, далее вызовите необходbмый метод, затем вызовите __getLastRequest() и получите нужный XML для запроса (не забываем выставить опцию trace в true).
Далее методом POST отправляйте этот XML(как тело POST запроса) тем же курлом туда, где живет WSDL службы. Не забудьте установить Content-Type как text/xml.
В ответ должен вернуться XML с данными, которые можно будет распарсить например с помощью simplexml

На сколько помню это всё, что нужно. Пробуйте
(Добавление)
Ну и конечно же в конце избавьтесь от SoapClient, раз уж отправляете сырые запросы Улыбка



Нашел программку - SoapUI. Ей даешь ссылку на WSDL, а она возвращает XML, который необходимо отправить серверу. Каждый веб-сервис обошел с помощью нее - получил к каждому необходимые XML-шаблоны, в которые скрипт просто подставляет нужные данные. Не знаю, насколько это "костыльно", но работает отлично! Проверил на 15 одновременно подключенных веб-сервисах - было примерно 37-42 сек., стало 8-12, что вполне приемлимо для моей задачи.
roxoman Отправлено: 04 Января, 2016 - 22:53:08 • Тема: Sphinx и индексация • Форум: Работа с СУБД

Ответов: 1
Просмотров: 842
Здравствуйте.

Суть такая:
MySQL 5.5 (таблицы InnoDB) + PHP 5 на Debian.

Пользователь может загружать свои прайс-листы с автозапчастями. Прайс-листов может быть сколько угодно. Под каждый прайс-лист динамически создается таблица. Сейчас работает поиск по артикулу - все отлично, так как нет никакой морфологии и т. п. Просят сделать также поиск по наименованию запчасти (например, колодки передние на BMW F01), для чего я решил выбрать sphinx. До этого со сфинксом не работал.

Мне нужно, чтобы при каждом обновлении прайс-листа обновлялся индекс таблицы этого прайс-листа (заранее неизвестно, когда пользователь обновит прайс-лист - индексация должна произойти сразу после загрузки прайс-листа). Запрос поисковый по сути всегда будет одинаковый (простой, по одному полю - по наименованию; нужно получить артикулы найденных запчастей, а дальше по старой схеме - поиск по артикулу), но имена таблиц для поиска разные, заранее неизвестные. Это можно реализовать на сфинксе?

Если можно, то киньте, пожалуйста, ссылку какую-нибудь на русском. Везде одно и то же - установка, конфигурационный файл с sql-запросом и аутентификационными данными mysql, команда для индексации таблицы. Мне это не помогло.
roxoman Отправлено: 27 Декабря, 2015 - 14:26:00 • Тема: Подгружать цены товаров в каталоге, после загрузки всей страницы • Форум: Вопросы новичков

Ответов: 3
Просмотров: 695
osoboopasen пишет:
Существуют две разные функции API:
1. getItemsByCatalog - получение позиций каталога
2. getStocksAndPrices - получение наличия и цены позиции. (функция может обработать несколько артикулов за раз и выдать массив с ценам и наличием)

Первая функция выполняется достаточно быстро, страница со список позиций в 200 штук загружается (По таймлайну хрома) за 1-1.5 секунды.

Если применить сразу вторую функцию и передать в нее список из 200 артикулов для, то страница начинает грузится 20+ секунд, а иногда даже 502 показывает.

Хочется сделать таким образом:
1. Грузится страница с позициями, но без цен
2. На месте где должна быть цена позиции отображается индикатор загрузки (простая крутилка, которая дает понять что идет загрузка данных)
3. Через 20 секунд напротив каждой позиции проставляется цена.

Плюсы такого подхода в том что пользователь при заходе на страницу уже через 1.5 секунды видит весь каталог и фотографии, пока определяется что ему надо у него происходит загрузка цен и через 20 секунд виден уже каталог с ценами.

Как такое реализовать?


Не веб-сервис автотрейда случаем?
roxoman Отправлено: 11 Ноября, 2015 - 16:04:33 • Тема: Параллельная отправка запросов к нескольким удаленным серверам • Форум: Работа с сетью

Ответов: 5
Просмотров: 1902
Мелкий пишет:
multi curl


Спасибо - это то, что нужно. Но разобрался только с JSON. Как быть с SOAP?
Как я понял, в случае с SOAP придется вручную строить XML-запрос и отдавать его в заголовках с помощью multicurl? Может, есть какой-то готовый класс для таких вещей? Я полдня разбираюсь, и у меня единственная проблема - как вручную построить этот XML-запрос (у каждого веб-сервиса же он разный).
roxoman Отправлено: 24 Октября, 2015 - 11:27:42 • Тема: Постоянно растущая загрузка памяти • Форум: Администрирование *nix

Ответов: 2
Просмотров: 847
Мелкий пишет:
Даже сайт специально сделали: http://www[dot]linuxatemyram[dot]com/

Память жрёт энергию всегда, вне зависимости, используется она реально или нет. Ну так почему бы и не использовать эту память?


Спасибо, не встречал нигде такую информацию!
roxoman Отправлено: 23 Октября, 2015 - 19:24:04 • Тема: Постоянно растущая загрузка памяти • Форум: Администрирование *nix

Ответов: 2
Просмотров: 847
Здравствуйте!

Сайт работает на VDS. Есть проблема - после перезагрузки VDS занятое количество памяти падает практически до нуля, но с каждым днем по-тихоньку это количество начинает расти (хотя нагрузка на сайт каждый день примерно одинаковая). Дней за 10 загрузка оперативки увеличивается почти до 100%, и приходится перезагружать сервер. Причем загрузка процессора всегда меньше 1%. С чем может быть связано подобное поведение? В администрировании не силен, поэтому прошу помощи!

Конфигурация: Debian, PHP, Mysql, Apache + Nginx.
roxoman Отправлено: 20 Октября, 2015 - 21:57:17 • Тема: Как сделать INSERT на 72 миллиона строк • Форум: Работа с СУБД

Ответов: 9
Просмотров: 4197
Если еще интересно, то у меня задача была такая - заливать в базу гигантские прайс-листы, загружаемые пользователями на сервер в формате CSV. Единственное условие - неограниченное время выполнения скрипта (хотя можно это обойти - немного коряво, и скорость естественно будет ниже раз в 50, но при большом желании можно работать и с ограничением в 30 секунд - здесь нам поможет обработка кусками и AJAX).

Загружаем файл csv на сервер естественно, создаем еще один временный файл csv, затем начинаем читать загруженный файл функцией fgetcsv построчно - разбираем строку, оставляем то, что нужно, и записываем это дело в массив. Массив конечно растет с каждой итерацией, а выделять на эту процедуру несколько гигабайт памяти мы не можем, так как одновременно могут грузиться десятки прайс-листов разными людьми, а у нас VDS за 1000 руб. в месяц. Поэтому пользуемся функцией memory_get_usage - она поможет нам определить, что мы пододвигаемся к пределу выделяемой на скрипт памяти - как только пододвинулись сбрасываем данные из массива во временный CSV-файл, который мы создали вначале. Таким методом обходим весь загруженный файл.
После обхода у нас получился новый файл CSV с уже обработанными данными, готовыми к заливке в базу. И тут нам на помощь приходит LOAD DATA INFILE - это самый быстрый способ загрузить данные в базу.
В итоге у нас вот что: памяти хавает скрипт столько, сколько Вы укажите - хоть 12 Мб, скорость при этом отличная - прайс-лист с миллионом строк загружается в базу за пару минут (над данными еще множество сложных обработок производится по ходу разбора), причем при увеличении объема скорость растет именно в арифметической прогрессии, то есть 10 миллионов строк - будет 20 минут, а 72 миллиона - около 2-х часов (но опять-таки, если данные никак не обрабатывать, а просто заливать как есть, то возможно, и часа с головой хватит).

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

Естественно это пример рабочей программы, а если Вам задавали конкретный вопрос "КАК?" и хотели услышать короткий ответ, то это, как писали выше, LOAD DATA INFILE - быстрее никак.
roxoman Отправлено: 20 Октября, 2015 - 21:25:42 • Тема: Параллельная отправка запросов к нескольким удаленным серверам • Форум: Работа с сетью

Ответов: 5
Просмотров: 1902
Здравствуйте!

Суть работы приложения такова:
Клиент вводит в поиск артикул и нажимает "Найти". Сервер должен получить информацию о наличии товара с этим артикулом у поставщиков. Поставщиков может быть 2, а может быть 20. Каждый поставщик имеет свой API и разные способы общения - где-то SOAP, где-то JSON. На каких-то поставщиков уходит 0.5 секунды, на каких-то 1.5, но если этих поставщиков 20, то и поисковой выдачи пользователь ждет 20-30 секунд, то есть сейчас у нас работает простое последовательное получение данных от каждого поставщика.

Собственно вопрос: каким способом можно отправлять запросы сразу на несколько удаленных серверов параллельно?

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB