ФорумПрограммированиеPHP для идиотов → асинхронный запрос в базу

асинхронный запрос в базу

  • esineokov

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 8 ноября 2012 г. 13:12

    Всем привет.
    Использую расширение mysqli для работы с базой mysql.
    У данного расширения есть возможность посылать в базу синхронные запросы, то есть не дожидаться результата выполнения запроса.
    Делаю в цикле запрос:
    mysqli->query($sql, MYSQLI_ASYNC);

    Ключ MYSQLI_ASYNC указывает, что запрос асинхронный. При следующем запросе получаю ошибку:
    Commands out of sync; you can't run this command now

    google и документация php подсказывает, что в таких случаях перед следующим запросом надо вызывать функцию
    void mysqli_free_result ( mysqli_result $result )

    которая освобождает память или что-то в этом роде.

    Но вот незадача, данной функции обязательно надо передавать результат предыдущего запроса.
    Но так как я делаю асинхронный запрос без ожидания результата, функцию эту вызвать я не могу.
    Как быть, подскажите что я не так делаю?

  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 8 ноября 2012 г. 14:18, спустя 1 час 6 минут 39 секунд

    для чего это?
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 10 ноября 2012 г. 9:35, спустя 1 день 19 часов 16 минут

    http://habrahabr.ru/post/155377/
    I hope to be useful
    ιιlllιlllι унц-унц
  • esineokov

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 10 ноября 2012 г. 9:57, спустя 22 минуты 19 секунд

    Faster, для экономии времени. В цикле множество итераций. Каждый раз в базу отправляется 10 000 записей. На каждый такой инсерт тратится от 10 до 30 секунд.
    artoodetoo, я читал эту статью. Она не описывает решения для подобной проблемы.
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 11 ноября 2012 г. 3:30, спустя 17 часов 32 минуты 39 секунд

    esineokov, мне как раз показалось, что описывает:
    Получение результатов выполнения асинхронного запроса происходит через функцию mysqli_reap_async_query. Вызов функции необходим всегда, так как он снимает блокировку с запроса и без этого вызова, все последующие запросы будут падать с «Commands out of sync».

    не?
    ιιlllιlllι унц-унц
  • esineokov

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 11 ноября 2012 г. 15:05, спустя 11 часов 35 минут 24 секунды

    artoodetoo,
    в чём же тогда смысл этой асинхронности, если результат всё равно ждать приходится.

    Получается, что единственный плюс такого метода, это выполнение других функций скрипта во время ожидания, но никак не экономия времени на запросах.
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 11 ноября 2012 г. 19:52, спустя 4 часа 46 минут 52 секунды

    то что ассинхронные "нити" в каком-то месте собираются с ожиданием — это нормально. будет профит или нет зависит от задачи. не все задачи эффективно распараллеливаются.
    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!