В разрабатываемом проекте имеется функционал импорта товаров из XML файла (в целях оптимизации быстродействия используется связка XMLReader + SimpleXMLElement), раннее логика процесса была такова: спарсить товары из XML'ки в массив, пройтись по этому массиву разделив его на 2 - товары которые нужно проапдейтить и новые товары которые нужно вставить. Опять-таки, в целях быстродействия скрипта данные записи вставлялись/апдейтились пачками, вот так:
Код: Выделить всё
// $productsToInsert - массив с записями которые нужно добавить в БД
if (!empty($productsToInsert)) {
$multipleInsertCommand = Yii::app()->db->schema->commandBuilder->createMultipleInsertCommand(self::TABLE_PRODUCTS, $productsToInsert);
$newProducts = $multipleInsertCommand->execute();
}
// $productsToUpdate - массив с записями которые нужно обновить в БД
if (!empty($productsToUpdate)) {
$query = "UPDATE ".self::TABLE_PRODUCTS." SET `price`=:price, `name`=:name, ... WHERE `id`=:id";
$command = Yii::app()->db->createCommand($query);
$command->bindParam(":price", $price, PDO::PARAM_STR);
$command->bindParam(":name", $name, PDO::PARAM_STR);
//...
$command->bindParam(":id", $id, PDO::PARAM_STR);
$transaction = Yii::app()->db->beginTransaction();
foreach ($productsToUpdate as $product) {
$price = $product['price'];
$name = $product['name'];
// ...
$id = $product['id'];
if ($command->execute())
$updatedProducts++;
}
$transaction->commit();
}
Однако появились новые требования: в ходе импорта товаров помимо обновления информации в одноименной таблице также необходимо выполнять привязку товаров к категориям - т.е. писать информацию ещё и в связную таблицу (связную - потому что один товар может быть привязан сразу к нескольким категориям, оттого полем `category_id` в таблице товаров не обойтись) - стало быть, имеющейся логикой воспользоваться больше не удастся - нужен циклический проход с получением идентификаторов добавляемых/обновляемых записей с сопутствующей привязкой к категориям. Пока решил использовать AR, но ведь это существенно ударит по ресурсам...Что подскажете из позиций оптимизации быстродействия?