vladka
Новичок
csv -> mysql, не уладываюсь в мемори лимит
читаем строчку из csv в буффер.
и записываем ее в базу.
Вообщем алгоритм довольно простой =)
Но есть одна проблема, при каждом выполнении запроса к базе увеличивается memory_usage().
увеличивается не сильно, порядка 1 000 байт на запросе. Но если размер csv прайса большой
(порядка 30 тыс строк), то возникают проблемы.
Возможно кто-то подскажет, может быть какие - то ресурсы нужно освободить после запроса и тп ?.
использую PDO.
получинную строчку из csv передают в функцию insertupdate.
/*
$table - название таблицы для вставки.
$fieldsValues - массив вида
@data = array(
'id' => $id,
'col1' => $col1,
'col2' => $col2
и тп.
)
ну и собственно такой вопрос, это нормально что с каждым запросом php тянет память, либо все же где-то есть утечка ?
посоветуйте как делать более удобно memory profiling ?
спасибо.
-~{}~ 10.08.09 18:36:
вопрос снят, включил лог запросов (у себя в коде) оказалось он и ел память.
читаем строчку из csv в буффер.
и записываем ее в базу.
Вообщем алгоритм довольно простой =)
Но есть одна проблема, при каждом выполнении запроса к базе увеличивается memory_usage().
увеличивается не сильно, порядка 1 000 байт на запросе. Но если размер csv прайса большой
(порядка 30 тыс строк), то возникают проблемы.
Возможно кто-то подскажет, может быть какие - то ресурсы нужно освободить после запроса и тп ?.
использую PDO.
получинную строчку из csv передают в функцию insertupdate.
/*
$table - название таблицы для вставки.
$fieldsValues - массив вида
@data = array(
'id' => $id,
'col1' => $col1,
'col2' => $col2
и тп.
)
PHP:
public function insertupdate($table, $fieldsValues, $primarykey) {
// делаю вид более удобным.
// заменяю значения на ?
foreach($fieldsValues as $key => &$val) {
$valUpdates[] = $val;
$arUpdates[] = $key.' = ?';
}
$m = memory_get_usage();
// для update нужны все значения
$duplicateUpdate = $arUpdates;
$duplicateVal = $valUpdates;
// Кроме primary key.
$pos = array_search($primarykey, $duplicateUpdate);
unset($duplicateUpdate[$pos]);
unset($duplicateVal[$pos]);
$m = memory_get_usage();
// Создаю sql запрос
$sql = "insert $table SET ";
$sql .= join(', ', $arUpdates);
$sql .= ' on duplicate key update '.join(' , ', $duplicateUpdate);
$m = memory_get_usage();
try {
// мерджу параметы, делаю prepare
$params = array_merge($valUpdates, $duplicateVal);
$stmt = $this->_handle->prepare($sql);
// и собственно сам запрос
$stmt->execute($params);
$m = memory_get_usage();
$id = $this->_handle->lastInsertId();
$m = memory_get_usage();
} catch (PDOException $e) {
echo $e->getMessage();*/
}
$m = memory_get_usage();
// возвращяем новый id, если была вставка.
return $id;
}
ну и собственно такой вопрос, это нормально что с каждым запросом php тянет память, либо все же где-то есть утечка ?
посоветуйте как делать более удобно memory profiling ?
спасибо.
-~{}~ 10.08.09 18:36:
вопрос снят, включил лог запросов (у себя в коде) оказалось он и ел память.