我们与许多房地产合作,在重新设计如何导入数据时,我遇到了一个有趣的问题。
首先,我们的系统的工作方式(不严格地说)是我们每天运行一次Coldfusion进程,该进程通过FTP检索IDX供应商提供的数据。他们将数据推送给我们。他们送我们的就是我们得到的。
多年来,这已被证明是相当不稳定的。
我正在用PHP在RETS标准上重新设计它,它使用SOAP方法来检索数据,这已经被证明比我们拥有的要好得多。
当谈到“更新”现有数据时,我最初的想法是只查询更新过的数据。有一个'Modified‘字段,它告诉你列表最后一次更新的时间,我的代码将捕获最近6小时内更新的任何列表(给自己一个窗口,以防出现问题)。
然而,我看到许多房地产开发商建议创建“批处理”过程,无论更新状态如何,都可以运行所有列表。
这是更好的方法吗?或者我只需要抓取我需要的数据就可以了吗?对我来说,做更多不必要的处理并没有多大意义。有什么想法?
发布于 2010-04-09 22:59:44
如果您可以信任修改后的方法,那么您的方法就足够好,而且比解析整个文件更快。如果你循环整个find,试图找出哪些被修改了,或者没有被修改,这将会更加困难。
如果您可以将文件直接发送到数据库,并使用其内置的文件导入功能进行导入,则会有轻微的性能改进。例如,MySQL有这个- http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html,我相信其他数据库,如SQL Server和Oracle也有这样的机制。这将为您节省编程语言工作的开销,并且只使用数据库资源。
发布于 2010-04-09 23:01:34
如果您足够幸运地拥有最后一次更新日期,那么限制您正在更新或导入的行数肯定会更有效。只需确保当记录更改时,数据源实际上正在更新日期,因为并不是所有的数据库都设计良好,并且并不总是按照您期望的方式执行操作。
无论你做什么,不要逐行处理,这是最无效的做事方式。我可以批量插入一百万条记录,比我一次处理100000条记录的数据集要快。但是,如果您正在讨论insert,那么有一些基于集合的方法来执行类型,并且基于集合更新已更改的100条记录的速度将比批量插入50,000条记录更快。
https://stackoverflow.com/questions/2608453
复制相似问题