Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Очередь из Insert-запросов
 
 автор: Filsh   (03.09.2011 в 12:00)   письмо автору
 
 

Проблема заключается в следующем:
У меня в скрипте выполняется много запросов на вставку
и получается так что они зависают в очереди mysql,
а мне нужно что бы они выполнялись только тогда когда вставилась
предидущая запись
Как это сделать? Использовать транзакции?

  Ответить  
 
 автор: Valick   (03.09.2011 в 12:12)   письмо автору
 
   для: Filsh   (03.09.2011 в 12:00)
 

приведите примеры запросов
и расскажите подробнее о том что вы имеете ввиду под
а мне нужно что бы они выполнялись только тогда когда вставилась
предидущая запись

__
Как это сделать? Использовать транзакции?
если у вас банковские операции, то несомненно нужно их мучить... эти самые транзакции

  Ответить  
 
 автор: Filsh   (04.09.2011 в 18:12)   письмо автору
 
   для: 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

  Ответить  
 
 автор: cheops   (04.09.2011 в 19:20)   письмо автору
 
   для: Filsh   (04.09.2011 в 18:12)
 

Вот что не понятно, вы из базы запрашиваете все дерево на каждом этапе? Может стоит его как-то в оперативной памяти, хранить? Т.е. пусть себе база данных неспеша пережевывает INSERT-запросы, а вы в это время будете использовать дерево из оперативной памяти, не обращаясь к еще не сохраненным страницам.

  Ответить  
 
 автор: Filsh   (04.09.2011 в 21:52)   письмо автору
 
   для: cheops   (04.09.2011 в 19:20)
 

Нет, не все дерево, а только все ссылки с уровня, например если в корне сайта нашлось 10 ссылок, то беру их - это уровень 1, все ссылки на страницах из предидущего уровня - это уровень 2 и так далее...
Ну вообщем идею я понял, спс

  Ответить  
 
 автор: cheops   (04.09.2011 в 10:07)   письмо автору
 
   для: Filsh   (03.09.2011 в 12:00)
 

>Как это сделать? Использовать транзакции?
Возможно, а как должна себя вести система, если не удалось вставить предыдущую запись (например, произошла ошибка)?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования