2010-04-09 14 views
2

우리는 많은 부동산을 사용하며 데이터를 가져 오는 방법을 재구성하는 동안 흥미로운 문제에 직면했습니다.효율적인 데이터 가져 오기?

먼저 우리 시스템이 작동하는 방식 (느슨하게 말하자면)은 FTP를 통해 IDX 공급 업체로부터 제공된 데이터를 검색하는 하루에 한 번 Coldfusion 프로세스를 실행합니다. 그들은 우리에게 데이터를 밀어 넣습니다. 그들이 우리를 보내는 것이 무엇이든 우리가 얻는 것입니다.

수년 동안, 이것은 다소 불안정한 것으로 입증되었습니다.

RETS 표준에서 PHP를 사용하여 데이터를 검색하는 SOAP 방법을 사용하여 PHP를 다시 설계했습니다.이 방법은 이미 가지고있는 것보다 훨씬 뛰어납니다.

기존 데이터를 '업데이트'하는 경우 초기 생각은 업데이트 된 데이터 만 쿼리하는 것이 었습니다. 목록이 마지막으로 업데이트 된시기를 알려주는 'Modified'필드가 있으며, 내가 가지고있는 코드는 지난 6 시간 내에 업데이트 된 모든 목록을 가져옵니다.

그러나 많은 부동산 개발자가 끊임없이 실행되는 업데이트 된 상태에 관계없이 모든 목록을 실행하는 '배치'프로세스를 만드는 것이 좋습니다.

더 좋은 방법인가요? 아니면 내가 필요한 데이터를 잡는 것만으로도 괜찮습니까? 필요한 것보다 더 많은 처리를하는 것은 나에게 많은 의미가 없습니다. 생각?

답변

3

MODIFIED를 신뢰할 수 있으면 전체 파일을 구문 분석하는 것보다 훨씬 빠르고 효율적입니다. 만약 당신이 전체를 반복해서 찾으려한다면, 수정 된 것을 찾느냐 안 하느냐가 더 어려워 질 것이다.

파일을 데이터베이스로 직접 보내고 파일 가져 오기 기능을 사용하여 가져올 수있는 경우 약간의 성능 향상이 있습니다. 예를 들어, MySQL이 있습니다 - http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html 나는 SQL Server와 오라클 같은 다른 DB도 그러한 메커니즘을 가지고 있다고 확신합니다. 이렇게하면 프로그래밍 언어 작업의 오버 헤드를 줄이고 데이터베이스 리소스 만 사용할 수 있습니다.

+0

죄송합니다. 'query'에 의해 요청할 때 DMQL을 사용했습니다. 예를 들어, Query() -> SELECT -> (Modified | PhotoModified)는 다른면에서 '수정되거나 사진 수정 날짜가 ______ 인 모든 목록을 제공합니다.'(오늘 _____은 6 시간)로 번역됩니다. 처리의 일부가 끝났으나 당신이 의미하는 바를 알고 있습니다. – Kevin

1

업데이트 된 날짜가 충분히 운이 좋으면 업데이트하거나 가져올 행 수를 제한하는 것이 더 효율적입니다. 레코드가 변경 될 때 데이터 소스에 의해 날짜가 실제로 업데이트되고 있는지 확인하십시오. 모든 데이터베이스가 잘 디자인되어 있지는 않으며 예상했던대로 일을 항상하지는 않습니다.

무엇을 하든지, 행 단위로 처리하지 마십시오. 이는 일을하는 데 가장 비효율적 인 방법입니다. 한 번에 한 행씩 100000 레코드의 데이터 세트를 처리 할 수있는 것보다 훨씬 빠른 속도로 일괄 삽입을 수행 할 수 있습니다. 그러나 당신이 삽입하고 100 레코드의 집합 기반 업데이 트가 50,000 레코드의 일괄 삽입보다 빠를 것입니다 삽입하는 경우 유형을 수행하는 방법을 기반으로 설정되어 있습니다.

+0

필드가 업데이트 된 것처럼 보이므로 지금은 그 필드에 의존하고 있습니다. 행 단위 프로세스 란 무엇을 의미합니까? RETS의 불행한 점은 쿼리에서 속성 유형을 명시 적으로 지정해야한다는 것입니다. 따라서 MLS 번호 목록을 작성하려면 각 속성 유형 (약 6 개)을 루프하고 풀다해야합니다. 그 후, 나는 모든 정보를 끌어내는 cron을 몇 백 개 나열하고있다. – Kevin

+0

이것은 한 번에 하나의 행만 처리하여 비효율적 인 방법입니다. 루프 또는 커서를 사용하는 경우 행 단위로 처리하는 것이 좋습니다.이 경우 모든 레코드를 잘라내어 대량 삽입물에 삽입하는 일괄 처리가 빠르지 만 시스템에서이 레코드를 테스트해야합니다. – HLGEM