Как автоматизировать поиск по четырем и более разнородным xml базам.

Rudolf

Новичок
Как автоматизировать поиск по четырем и более разнородным xml базам.

Уважаемое сообщество.

Пожалуйста, подскажите как эффективнее решить мою задачу.

Дано: три туроператора, которые позволяют через XML шлюз получить информацию о горячих предложениях.
Требуется: автоматизировать процесс поиска нужного тура. Сделать так чтобы поиск по базам всех трех( а в будущем 4 и более) производился из одной формы. Пользователь заполняет один раз - система ищет по всем и выдает результат.
Платформа: PHP5, MySql4, Apache, Linux

Структура xml файлов в общем похожа, но у каждого есть свои особенности, поэтому нужно писать к каждому туроператору свой "адаптер".
В общем виде структура выглядит так:
<spo>
<country_id>12345</country_id>
<city_id>123</city_id>
<region_id>123</region_id>
<hotel_id>12345</hotel_id>
<price>559</price>
....
...
...
</spo>
Т.е. блок спецпредложений есть сложным типом данных, который хранит в основном идентификаторы данных, которые в свою очередь хранятся в справочниках готелей, городов, курортов, и т.д. Одна запись о горячем предложении ссылается в среднем на 22 справочника. Самих записей о предложениях может быть от 200 до 1500.

У разных туроператоров отличаются как структуры предложения, так и идентификаторы и справочники.

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


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

1. Поскольку данные меняются с один раз в час, то один раз в час нужно проделать такие операции:
а). Унифицировать входные даннные.
Для этого получить и парсить все xml файлы предложений вместе со справочниками и записывать их в свою sql-базу с унифицированными значениям ключей, запысывая идентификатор туроператора.
Тут уже возникает куча запросов: к каждому справочнику, каждого оператора - 22x4 = 88 запросов на выдачу xml которые пожрут кучу памяти для парсинга... :(
б). Из своей формы поиска обращаться к унифицированной базе, искать, выводить результаты.

Мне кажется, все это очень ресурсоемко, но может быть, я ошибаюсь.
Как оптимизировать этот процесс?

Спасибо заранее. Надеюсь на вашу помошь.
 

cDLEON

Онанист РНРСlub
По крону забирать эти файлы и сохранять в свою БД данные, по которым будет осуществляться поиск.
 

slach

Новичок
Rudolf ;)) хехе... давай угадаю туроператоров?

ТезТур, Капитал Тур
и еще кто нибудь кто спецы через САМО-софт в XML формате сохраняет?

ой хотя у тебя украина, может и другой рынок

вообще там основная проблема не распарсить...
а потом СПРАВОЧНИКИ свести

отели одни и теже по разному называются
принцип формировния цены у Капитала или Теза отличается в разы

-~{}~ 18.02.09 11:17:

вообще если бы Sedna развивалась как следует... то я бы ее порекомендовал...
а так... ну ПРОСТО такая задача не решается, савсем

по крону надо забирать это факт
 

Alexandre

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

у меня похожая задача, только больше инфы и забираю реже,
нужно свести информацию от 700 магазинах и 1,8 млн товаров

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

что по решениям, то парсится ХМЛник, и для каждой позиции товара определяются соответствующие модели
если модель неопознана, то решение принимает оператор: либо прилинковать к существующей модели, либо создать новую
в общем там довольно-таки не простой алгоритм сопоставления моделей.

специфики туроператоров не знаю, скорее всего стоит забирать информацию раз в час по крону, парсить и класть в базу а потом сводить к одному знаменателю
 

slach

Новичок
Специфика тур операторов такова что сейчас забирать лучше Раз в сутки
и забирать не ВЕСЬ объем а только то, что изменилось если позволяет

туроператор продает туруслугу ВПЕРЕД для турагенств...

ладно это все специфика конкретной области

топик стартеру надо готовое решение
ЕГО НЕТ!

как правильно подсказывает александр
при появлении в XML чего то такого что не было привязано к ГЛОБАЛЬНЫМ справочникам... нужно сопоставление ЧЕЛОВЕКОМ... и его уже можно делать по левенштайну или просто через AJAX поиск по LIKE '%подстрока%'
 

Rudolf

Новичок
Автор оригинала: slach
Специфика тур операторов такова что сейчас забирать лучше Раз в сутки
и забирать не ВЕСЬ объем а только то, что изменилось если позволяет
туроператор продает туруслугу ВПЕРЕД для турагенств...
Спасибо. Вы угадали про СамоСофт и ТезТур. Остальные, к сожалению, пользуются своими специализированными решениями.
СамоСофт, по моему, делает хорошее дело, пытаясь развить и документировать TourML (подмножество XML) как универсальный стандарт обмена данными между операторами и агентствами.
Но когда еще это настанет...:(

топик стартеру надо готовое решение
ЕГО НЕТ!
Нет, нет. Мне не нужно готовое решение(хотя хотелось бы :) ). Я просто хотел убедиться, что нахожусь на правильном пути решения.

Я впервые столкнулся с такими объемами данных передаваемых через xml. Т.е. я уже использовал xml для шаблонов страниц и передачи контента, но там обьем ~20Kb.
А тут список spo - 5Mb.

-~{}~ 18.02.09 18:14:

Спасибо за ответы, начинаю лучше понимать во что я вляпался... :)

chameleonУж точно не памяти. Каков средний размер такого справочника?
От 8 до 500Кб. Хуже со списком спецпредложений, там до 5Мб доходит.
Проблема во времени, да? Можете подробней обьяснить?

slachа потом СПРАВОЧНИКИ свести
Почему? Из-за того что у разных туроператоров одни и те же курорты и готели могут по разному называться?
Может быть дополнительную таблицу сопоставлений выделить? Один раз заполняется менеджером, а потом оттуда читать?

slachпри появлении в XML чего то такого что не было привязано к ГЛОБАЛЬНЫМ справочникам...
Круто. Спасибо Вам и Александру. Действительно зачем забирать и парсить все справочники каждый час. Можно ведь запрашивать только тот справочник на который ссылаются данные которые не имеют сопоставления в уже импортированом. Тода количество запросов сократится. :)

---

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

Как вы думаете, возможно ли получив новый xml со спецпредложениями сравнить его с предыдущим и выделить только новые записи? Ускорит ли это обработку?

Если скрипт запускаемый по cron должен последовательно обходиьт все 4-6 баз туроператоров, то возникает явная задержка между первым и последним. Т.е. от первого новые данные уже поступили, а от последнего - нет. Можно ли запускать одновременно 6 скриптов которые будут от разных операторов собирать данные? проблемы в общем это не устранит, но сократит время между первым и последним.

Пожалуйста, напишите какие еще сложности вы видите в реализации этой системы. возможно стоит вообще отказаться от реализации...:( Пусть менеджеры вручную ищут.

Я думал еще вот что, а если не собирать все данные к себе в базу, а сделать набор "драйверов" к системе подбора туров каждого оператора и из унифицированной формы посылать им запросы и обрабатывать уже только результаты. Необходимости собирать и сопоставлять справочники это не отменяет, но уменьшает время на обработку самих спецпредложений. Плюс акутальность данных повышается. Как вы думаете это возможно?
 

slach

Новичок
СПО обновляются РАЗ в сутки
само по себе СПО задним числом обычно НЕ обновляется
ТЕЗ позволяет забирать только измененные СПО, само софт получаешь список, смотришь какие СПО ты еще не качал
по моему Самософт вообще только позволяет Статические XML файлы выкладывать... соответсвенно организация "списка" та еще задача

но вообще надо глядеть как работает САМО Тур-агент
возможно эмулировать его работу... при подключении к тур-оператору

тебе явно надо сначала связываться с ИТ ПРЕДСТАВИТЕЛЯМИ тур операторов
чтобы решить такую задачу

для начала... для кажого тур оператора свой скрипт...
СРАВНЕНИЕ

-~{}~ 19.02.09 11:02:

Набор "драйверов" может и тормозить

поиск нормальный в XML есть только у ТезТура
у самософт - очень кривой "веб-портал" студенты или дельфисты писали....

-~{}~ 19.02.09 16:24:

вот кстати новый интересный инструментарий
"для больших XML файлов"
http://sourceforge.net/projects/xmlstar/
 

BOB41K

Новичок
Подкиньте, пожалуйста, ссылки на XML-шлюзы от туропетаротов. Надо для написания диплома. Гуглом нашел лишь шлюз капитал-тура.
Заранее спасибо.
 
Сверху