Nano Hash - криптовалюты, майнинг, программирование

База данных не отвечает, пока все запросы не будут успешно отправлены: MySQL

Я использую Laravel 5.3 для веб-API, и ниже приведен мой запрос JQuery Ajax, который одновременно сохраняет записи. Ниже приведен код..

for (i = 0; i < 100; i++) {
    var 
     data={'Role' : "Role"+i},
     request = $.ajax({
        url:                'http://localhost:1234/Practise/public/api/SaveRoleApi',
        type:               "POST",
        data:               JSON.stringify(data),
        contentType:        "application/json; charset=utf-8",
        async:  true,
        success: function(d){ console.log(d); }
     });
}

Я использую цикл for для сохранения 100 записей. Пожалуйста, проверьте, есть ли async: true,. Причина, по которой я сказал, что это сохранение записей одновременно, потому что запросы отправляются случайным образом, хотя я подтвердил, что все запросы отправляются успешно.

Мой вопрос: я не могу отправить оператор выбора select * from tblrole, пока не будут отправлены все вышеуказанные запросы ajax.

Проблема в том, что база данных не отвечает до тех пор, пока не будут отправлены все запросы.

Что я должен сделать, чтобы получить записи во время отправки запросов на публикацию?

Ниже приведены мои данные Phpmyadmin.

введите здесь описание изображения


  • похоже, что SaveRoleApi выполняет блокировку таблицы. Проверьте свой php-код 02.09.2016
  • Вы используете innodb? У вас включена какая-то блокировка таблицы? Вы максимизируете свои соединения mysql и заставляете остальных ждать? Вы можете попробовать разгрузить это в очередь. Много недостающей информации и много возможностей попробовать. Какие из них вы пробовали? 02.09.2016
  • @Forbs: я использую фреймворк Laravel 5.3. В какой части моего кода я должен проверить блокировку таблицы? 02.09.2016
  • Извините, без понятия, так как я не программирую в Laravel. 02.09.2016
  • @Blake: Где я должен проверить опцию блокировки таблицы? Нет, я ничего не делаю, как один запрос за раз, а другие ждать. Вы можете проверить, что мои запросы одновременны. Я использовал async: true, в ajax. Можете ли вы объяснить более подробно о разгрузке? Должен ли я следовать этой статье? mysqltutorial.org/mysql-table-locking 02.09.2016
  • @Helper см. laravel.com/docs/5.3/queues -- Кроме того, вы можете включить mysql регистрируется в вашем my.cnf, если вам действительно нужно углубиться в мельчайшие детали. Я предполагаю, что ваши таблицы innodb, поэтому блокировка таблицы google innodb. 02.09.2016
  • Означает ли это, что при использовании Queue все одновременные запросы должны быть преобразованы в последовательные запросы? Мой приведенный выше код — это всего лишь пример кода для проверки, может ли код поддерживать параллельный запрос или нет. 02.09.2016
  • InnoDB не блокирует таблицы, за исключением таких вещей, как ALTER TABLE; MyISAM делает для многих вещей. 05.09.2016
  • Используете ли вы один и тот же браузер и один и тот же веб-сервер для своего приложения и phpmyadmin? Обычно сервер ждет завершения одного запроса, прежде чем позволит вам выполнить другой. Попробуйте использовать другой браузер для phpmyadmin. 07.09.2016
  • Вы отправляете 100 записей для хранения в таблице базы данных? 07.09.2016
  • Да, в цикле в Jquery ajax с асинхронной опцией. 09.09.2016
  • Можете ли вы показать нам код, связанный с базой данных, в SaveRoleApi? 09.09.2016
  • Важный вопрос (хотя он не будет казаться таким важным) - является ли веб-сервер Apache? 09.09.2016
  • Хорошо, тогда вот что происходит - на самом деле это вина Apache. Он использует шаг оптимизации, называемый конвейерной обработкой, и пытается договориться с вашим браузером, чтобы использовать одно TCP-соединение для всего (в настоящее время для этого у нас есть http2). Тем не менее, это не очень хорошее программное обеспечение, поэтому каждый запрос, который вы пытаетесь сделать, будь то с другой вкладки или экземпляра вашего браузера, не даст результатов, пока эти ajax не будут выполнены. В принципе, у вас MySQL работает, JS работает нормально, тормоз между всем ставит именно веб-сервер. Решение: отказаться от Apache. Я так и не узнал, как это отключить. 09.09.2016
  • Кроме того, именно по этой причине я пошел с nginx и никогда не оглядывался назад. Кроме того, не используйте phpmyadmin и используйте альтернативу, которая не будет использовать ваш браузер (SQLYog, MySQL Workbench, HeidiSQL и т. д.). Удачи! 09.09.2016
  • Эта проблема не должна возникать на рабочем сервере, когда у каждого запроса есть отдельный процесс. 12.09.2016

Ответы:


1

Возможно, это путаница...

async связано с получением ответа, а не с параллельной отправкой.

Представленный вами код является однопоточным — отправьте один запрос, отправьте другой запрос, ..., но не ждите, пока они завершатся.

Затем, только после 100 отправок, выполните SELECT.

Я предполагаю, что AJAX задыхается от такого количества представлений и останавливается.

05.09.2016
  • какой правильный код для чтения данных при отправке нескольких одновременных запросов? 07.09.2016
  • Если бы вы могли отправить один запрос AJAX_ со всеми 100 элементами, все было бы намного быстрее. Один пакет INSERT из 100 строк будет в 10 раз быстрее. 07.09.2016
  • И не забывайте о накладных расходах, связанных с дополнительными 99 обращениями туда и обратно, открытием дополнительных 99 подключений к MySQL и т. д. 07.09.2016
  • но то же самое верно, когда одновременные 100 подключений отправляют запрос на сервер 09.09.2016
  • Можете ли вы предоставить оператор INSERT SQL. Насколько велика таблица? 09.09.2016
  • В таблице есть один столбец типа String и один столбец Auto Increment 09.09.2016

  • 2

    Пахнет так, как будто у вас есть autocommit=0, но вы никогда не выпускали COMMIT. Пожалуйста, покажите нам код подключения, а также некоторые операторы SQL. Я предполагаю, что это в SaveRoleApi.

    Попахивает «блокировкой таблицы», которую вы получаете от MyISAM. Если ваши таблицы таковы, перейдите на InnoDB.

    05.09.2016
  • где я могу проверить autocommit=0 и, пожалуйста, что я должен показать в этом контексте? 05.09.2016

  • 3

    Используете ли вы один и тот же браузер и один и тот же веб-сервер для своего приложения и phpmyadmin? Обычно сервер ждет завершения одного запроса, прежде чем позволит вам выполнить другой. Попробуйте использовать другой браузер для phpmyadmin.

    06.09.2016
  • Это связано с тем, что сервер ожидает закрытия дескриптора файла сеанса после каждого запроса. Вы можете решить эту проблему, закрыв дескриптор сеанса в своем коде, как только вам больше не нужно записывать информацию в переменную $_SESSION, используя session_write_close. 07.09.2016
  • Спасибо, Том. Мне так и не удалось выяснить, чем это вызвано. Думал, что это может быть корнем проблемы Рика Джеймса. 07.09.2016
  • Новые материалы

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

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование