|
|
|
| Проблема заключается в следующем:
У меня в скрипте выполняется много запросов на вставку
и получается так что они зависают в очереди mysql,
а мне нужно что бы они выполнялись только тогда когда вставилась
предидущая запись
Как это сделать? Использовать транзакции? | |
|
|
|
|
|
|
|
для: Filsh
(03.09.2011 в 12:00)
| | приведите примеры запросов
и расскажите подробнее о том что вы имеете ввиду под
а мне нужно что бы они выполнялись только тогда когда вставилась
предидущая запись
__
Как это сделать? Использовать транзакции?
если у вас банковские операции, то несомненно нужно их мучить... эти самые транзакции | |
|
|
|
|
|
|
|
для: Valick
(03.09.2011 в 12:12)
| | Ну вообщем то нет смысла показывать запрос, там обычный insert
Система - это парсер сайта, суть ее в том что сайт представлятся в виде графа и по ниму проходит алгоритм поиска в ширину и все ссылки на странице сохраняются, после этого берется следующая ссылка из тех что нашлись в предидущем шаге, вот здесь у меня работа скрипта прекращается потому что предидущая ссылка еще не сохранилась и скрипту нечего обрабатывать.
while($node = $this->getLevel($level))
{
// проходим только по непосещенным узлам
if(isset($node['node_visited']) && $node['node_visited'] == 0)
{
// берем содержимое страници
$content = $this->_getPage($node);
$parser = $this->_config['parser'];
if(!method_exists('BFS', $parser))
$parser = 'defaultParser';
// достаем все ссылки
$links = $this->$parser($content);
// сохраняем все ссылки и помечаем их как не посещенные и с уровнем на один больше чем текущий
$this->_saveNodes($links, array(
'node_level' => $level + 1,
'node_visited' => 0,
));
// помечаем текущий узел как посещенный
$this->markAsVisited($node);
}
// если очередь пуста увеличиваем уровень и все повторяем
if(empty($this->_nodes))
$level++;
}
|
Как вариант и наверное самое лутшее решение это завести массив очереди и работать с ним, а в деструкторе сделать его сохранение в базу. Как вы думаете?
P.S. Прошу прошения что тема отдалилась от вопроса mysql | |
|
|
|
|
|
|
|
для: Filsh
(04.09.2011 в 18:12)
| | Вот что не понятно, вы из базы запрашиваете все дерево на каждом этапе? Может стоит его как-то в оперативной памяти, хранить? Т.е. пусть себе база данных неспеша пережевывает INSERT-запросы, а вы в это время будете использовать дерево из оперативной памяти, не обращаясь к еще не сохраненным страницам. | |
|
|
|
|
|
|
|
для: cheops
(04.09.2011 в 19:20)
| | Нет, не все дерево, а только все ссылки с уровня, например если в корне сайта нашлось 10 ссылок, то беру их - это уровень 1, все ссылки на страницах из предидущего уровня - это уровень 2 и так далее...
Ну вообщем идею я понял, спс | |
|
|
|
|
|
|
|
для: Filsh
(03.09.2011 в 12:00)
| | >Как это сделать? Использовать транзакции?
Возможно, а как должна себя вести система, если не удалось вставить предыдущую запись (например, произошла ошибка)? | |
|
|
|