2010-04-09 69 views
2

我們與很多房地產合作,並在重新構建數據導入方式的同時,遇到了一個有趣的問題。首先,我們的系統工作方式(鬆散地說)是我們每天運行一次Coldfusion進程,檢索IDX供應商通過FTP提供的數據。他們將數據推送給我們。無論他們寄給我們的是我們得到的。高效的數據導入?

多年來,這已被證明是相當不穩定的。

我正在用RETS標準重新構建它,它使用SOAP方法檢索數據,這已經被證明比我們的要好得多。

當談到'更新'現有數據時,我最初的想法是隻查詢已更新的數據。有一個'修改'的字段,告訴你什麼時候最後更新了列表,並且我擁有的代碼將獲取在過去6小時內更新的任何列表(給自己一個窗口以防出現問題)。

但是,我看到很多房地產開發商建議創建貫穿所有列表的「批處理」流程,而不管持續運行的更新狀態如何。

這是更好的方法嗎?或者我剛剛抓住了我所知道的我需要的數據?對我來說做更多的處理並不是很有意義。思考?

回答

3

如果您可以信任MODIFIED,那麼您的方法比分析整個文件更好,更快。如果你正在循環整個發現試圖找到修改或不修改將會更難。

如果您可以直接將文件發送到數據庫並使用其內置文件導入功能導入文件,性能會有輕微改善。例如MySQL有這個 - http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html我相信像SQL Server和Oracle這樣的其他數據庫也有這樣的機制。這將爲您節省編程語言工作的開銷,並僅使用數據庫資源。

+0

對不起,'查詢'我的意思是在我的請求中使用DMQL。例如,查詢() - >選擇 - >(修改| PhotoModified),然後在另一邊翻譯爲'給我任何列表修改或照片修改日期是______',其中_____是今天 - 6小時。所以這部分處理就在他們的最後,但我知道你的意思。 – Kevin 2010-04-09 15:04:09

1

如果你足夠幸運有最後更新的日期,那麼限制你正在更新或導入的行數肯定會更有效。只要確保日期實際上由數據源更新時記錄發生變化,因爲並非所有數據庫都設計良好,並且並不總是按照您期望的方式執行操作。

無論你做什麼,都不要逐行處理,這是做事最不可行的方式。我可以比一次處理一行100000條記錄的數據集快一百萬條記錄的批量插入。但是,如果插入您正在談論的基於集合的方式來執行此類型,並且更改的100條記錄的集合更新將比50,000條記錄的批量插入更快。

+0

該字段似乎已更新,所以我現在依靠這一點。逐行處理意味着什麼? RETS的不幸的一面是我必須在查詢中明確聲明屬性類型。因此,爲了建立我的MLS號碼列表,我必須循環每個屬性類型(大約6)並將其拉下。在那之後,我每個cron只運行幾百個清單,這些清除了所有的信息。 – Kevin 2010-04-09 15:08:44

+0

這意味着你一次只能處理一行,這是一種效率低下的做法。如果你使用循環或遊標,你可能會逐行處理。在這種情況下,截斷所有記錄並將其插入批量插入的批處理過程可能會更快,但您必須在系統上對其進行測試。 – HLGEM 2010-04-09 17:17:08