我有一个包含数据的大型XML文档(~10 mb)。我需要解析这个XML并通过我的数据库来更新它。有3例:
如果自上次检查XML以来项目的数据没有更改,请不要采取任何措施。 XML中的每个项目都有自己的ID,因此我可以轻松地从数据库中检索它。
尽管如此,迭代这些项目的速度确实很慢,但我需要数据库的关系方面(XML代表用户可以购买的项目,因此我无法为项目生成新的ID,只是批量加载它们)。
实现这一目标的最佳方法是循环XML并单独查找每个项目是真的慢。
这是使用PHP在MySQL数据库中完成的。
== edit ==
此过程的基本循环如下:
while ($data = get_next_bit_of_data_from_xml())
{
// this next line is the slow part
if ($object = get_object_from_database($data['id']))
{
// update $object
// ...
// persist
$object->save();
}
// build new object and persist
// ...
}
脚本速度太慢的原因是因为我不能使用任何类型的批量操作,如LOAD DATA INFILE,因为对于XML中的每个条目,我需要检查对象是否已经存在。
所以我真的想知道是否有人可以提出另一种方法,允许我批量加载数据,同时保持现有数据的参照完整性。
答案 0 :(得分:2)
您可以使用INSERT ... ON DUPLICATE KEY UPDATE
see link here。首先更新要禁用的所有记录。然后运行上面的INSERT ... ON DUPLICATE KEY UPDATE
查询,以插入或更新包含新数据的现有行,并将它们设置为启用。
答案 1 :(得分:1)
您可以使用INSERT DELAYED
和UPDATE LOW_PRIORITY
来加快此过程。