У меня большой XML-документ (~ 10 МБ), который содержит данные.Мне нужно проанализировать этот XML и просмотреть мою базу данных, чтобы обновить его.Существует 3 случая:
- Новые данные присутствуют в XML с прошлого раза - вставьте их в БД
- Элемент изменился - обновите его в БД
- Элемент был удален из XML с прошлого раза - пометьте его как отключенный в БД
Если данные для элемента не изменились с момента последней проверки XML, не беритедействие.Каждый элемент в XML имеет свой собственный идентификатор, так что я могу легко извлечь его из базы данных.
Перебирать элементы, подобные этому, очень медленно, но мне нужны реляционные аспекты базы данных (XML представляетэлементы, которые пользователи могут покупать, поэтому я не могу сгенерировать новые идентификаторы для элементов и просто массово их загрузить).
Каков наилучший способ реализации этого, поскольку выполняется циклический просмотр 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 мне нужно проверить, существует ли объект.
Так что мне действительно интересно, может ли кто-нибудь предложить другой подход, который позволит мне массовозагрузка данных при сохранении ссылочной целостности с существующими данными.