我有一个包含数据的大型 XML 文档 (~10 mb)。我需要解析这个 XML 并通过我的数据库来更新它。有3种情况:
- 自上次以来 XML 中存在新数据 - 将其插入数据库
- 项目已更改 - 在数据库中更新它
- 自上次以来已从 XML 中删除了一项 - 在数据库中将其标记为禁用
如果自上次检查 XML 以来项目的数据没有更改,则不采取任何措施。XML 中的每个项目都有自己的 ID,因此我可以轻松地从数据库中检索它。
虽然迭代这样的项目真的很慢,但我需要数据库的关系方面(XML 表示用户可以购买的项目,所以我不能为这些项目生成新的 ID,而只是批量加载它们)。
实现这一点的最佳方式是什么,因为循环遍历 XML 并单独查找每个项目真的很慢。
这是使用 PHP 到 MySQL 数据库中完成的。
== 编辑 ==
这个过程的基本循环如下:
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 中的每个条目,我需要检查对象是否已经存在。
所以我真的想知道是否有人可以提出另一种方法,让我能够在保持现有数据的参照完整性的同时批量加载数据。