2010-04-09 2 views
2

Мы работаем с большим количеством недвижимости, и, в то время как перестраивая процесс импорта данных, я столкнулся с интересной проблемой.Эффективный импорт данных?

Во-первых, как работает наша система (свободно говоря), мы запускаем процесс Coldfusion один раз в день, который извлекает данные, предоставленные поставщиком IDX через FTP. Они подталкивают данные к нам. Что бы они ни посылали нам, это то, что мы получаем.

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

Я перестраиваю его с помощью PHP по стандарту RETS, который использует методы SOAP для извлечения данных, которые уже оказались намного лучше, чем у нас.

Когда речь заходит о «обновлении» существующих данных, моя первоначальная мысль заключалась в том, чтобы запрашивать только данные, которые были обновлены. Существует поле для «Модифицировано», в котором говорится о том, когда последнее обновление было обновлено, а код, который у меня есть, будет захватывать любые обновления, обновленные за последние 6 часов (дайте мне окно, если что-то пойдет не так).

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

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

ответ

3

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

Будет небольшое улучшение производительности, если вы можете отправить файл непосредственно в базу данных и импортировать его с помощью встроенных функций импорта файлов. Например, MySQL имеет это значение - http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html Я уверен, что у других БД, таких как SQL Server и Oracle, есть такие механизмы. Это избавит вас от накладных расходов на работу языка программирования и будет использовать ресурсы базы данных.

+0

Извините, по запросу «Я имел в виду использование DMQL в моем запросе. Например, Query() -> SELECT -> (Modified | PhotoModified), который затем переводится с другой стороны, как «дайте мне листинг, в котором изменение или дата изменения фотографии ______», где _____ сегодня - 6 часов. Так что часть обработки на их конце, но я знаю, что вы имеете в виду. – Kevin

1

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

И что бы вы ни делали, не обрабатывайте строки за строкой, это самый неэффективный способ сделать что-то. Я могу сделать пакетную вставку из миллиона записей быстрее, чем я могу обработать набор данных из 100000 записей по одной строке за раз. Но существует множество способов сделать тип, если вы вставляете, о котором вы говорите, и обновленное 100 обновленных записей будет более быстрым, чем пакетная вставка из 50 000 записей.

+0

Поле, похоже, обновлено, поэтому я полагаюсь на это на данный момент. Что значит по строковой процедуре? Несчастная сторона RETS заключается в том, что я должен явно указать тип свойства в запросе. Поэтому, чтобы построить список MLS-номеров, я должен зациклировать каждый тип свойства (около 6) и вытащить их. После этого я использую только несколько сотен списков каждый cron, которые вытаскивают полную информацию. – Kevin

+0

Это означает, что вы обрабатываете только одну строку за раз, что является неэффективной практикой. Если вы используете цикл или курсор, вы по очереди выполняете обработку по строкам.В этом случае пакетный процесс для усечения всех записей и вставки их в объемную вставку может быть быстрее, но вам придется протестировать это в своей системе. – HLGEM

Смежные вопросы