Php 高效的数据导入?

Php 高效的数据导入?,php,data-integrity,import,Php,Data Integrity,Import,我们与许多房地产公司合作,在重新构建数据导入方式的同时,我遇到了一个有趣的问题 首先,我们系统的工作方式(粗略地说)是每天运行一次Coldfusion进程,该进程通过FTP检索IDX供应商提供的数据。他们把数据推给我们。他们送我们的就是我们得到的 多年来,事实证明这是相当不稳定的 我正在用PHP在RETS标准上重新构建它,该标准使用SOAP方法检索数据,这已经被证明比我们现有的要好得多 说到“更新”现有数据,我最初的想法是只查询已更新的数据。有一个“Modified”字段,告诉您清单最后一次更新

我们与许多房地产公司合作,在重新构建数据导入方式的同时,我遇到了一个有趣的问题

首先,我们系统的工作方式(粗略地说)是每天运行一次Coldfusion进程,该进程通过FTP检索IDX供应商提供的数据。他们把数据推给我们。他们送我们的就是我们得到的

多年来,事实证明这是相当不稳定的

我正在用PHP在RETS标准上重新构建它,该标准使用SOAP方法检索数据,这已经被证明比我们现有的要好得多

说到“更新”现有数据,我最初的想法是只查询已更新的数据。有一个“Modified”字段,告诉您清单最后一次更新的时间,我的代码将获取过去6小时内更新的任何清单(给我自己一个窗口,以防出错)

然而,我看到很多房地产开发商建议创建“批处理”流程,该流程将在所有列表中运行,而不管不断运行的更新状态如何


这是更好的方法吗?还是我只需要抓取我知道我需要的数据就可以了?对我来说,做过多的处理是没有意义的。想法?

如果您可以信任修改后的方法,那么您的方法足够好,比解析整个文件更快。如果你正在循环整个查找,试图找到修改或不修改的内容,这将更加困难


如果您可以将文件直接发送到数据库,并让其使用内置的文件导入功能进行导入,则性能会略有提高。例如,MySQL有这样的机制——我相信其他数据库,如SQL Server和Oracle也有这样的机制。这将为您节省编程语言工作的开销,并且只使用数据库资源。

如果您有幸拥有最后更新的日期,那么限制更新或导入的行数肯定会更有效。当记录发生变化时,请确保数据源实际上正在更新日期,因为并非所有数据库都设计良好,并且并非总是按照预期的方式进行操作


无论你做什么,都不要逐行处理,这是最低效的方式。我可以批量插入一百万条记录,比一次一行处理100000条记录的数据集要快。但是,如果您正在谈论插入,则有基于集合的方法来执行类型,并且基于集合的更新更改的100条记录要比批量插入50000条记录快。

对不起,我所说的“查询”是指在请求中使用DMQL。例如,Query()->SELECT->(Modified | PhotoModified),然后在另一侧翻译为“给我任何列表,其中修改或照片修改的日期为uuuuuuuuuuuuuuuuuuuu”,其中uuuuuuuuuuuuuuuuuuuuuuu是今天-6小时。这一部分的处理已经结束了,但我知道你的意思。这个字段似乎已经更新了,所以我现在就依靠它。逐行过程是什么意思?RETS不幸的一面是,我必须在查询中显式声明属性类型。因此,为了建立我的MLS编号列表,我必须循环每个属性类型(大约6个)并将其下拉。在那之后,我只在每个cron上运行几百个列表来获取完整的信息,这意味着一次只处理一行,这是一种低效的做法。如果您使用的是循环或游标,则可能是逐行处理。在这种情况下,截断所有记录并以批量插入方式插入它们的批处理过程可能会更快,但您必须在系统上进行测试。