Эффективный импорт данных? - PullRequest
2 голосов
/ 09 апреля 2010

Мы работаем со многими объектами недвижимости, и, перестраивая архитектуру импорта данных, я натолкнулся на интересную проблему.

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

За прошедшие годы это оказалось довольно нестабильным.

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 09 апреля 2010

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

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

1 голос
/ 09 апреля 2010

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

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

...