2010-04-09 73 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