Доступ к базе данных каждую секунду, используя ajax - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть сценарий JavaScript, который использует Ajax для вызова PHP страницы, страница php извлекает новые обновления из базы данных MYSQL.

Ajax запрос повторяется каждый разодну секунду.

Полезно ли обращаться к базе данных каждую секунду?Есть ли еще какие-либо предложения по улучшению этой операции?

edit

Я хочу сделать что-то вроде обновлений Twitter в режиме реального времени, каждую секунду я буду получать только новые данные, если нет новыхданные, ничего не вернется из базы данных (но все равно будет обращаться к базе данных каждые 1 сек)

Ответы [ 4 ]

2 голосов
/ 01 ноября 2011

Я бы не создавал зависимость между моим пользовательским интерфейсом и базой данных напрямую.

Вероятно, разумно (в зависимости от потребностей приложения), чтобы пользовательский интерфейс вызывал веб-сервис раз в секунду. Этот веб-сервис может решить, будет ли правильной стратегией возвращать кэшированный результат или получать новые данные из базы данных (если у вас есть десятки вызовов из десятков браузеров в секунду, вы, конечно, не хотите вызывать MySQL десятки раз в этом случае. одну секунду.).

Если пользовательский интерфейс вызывает веб-службу и веб-служба взаимодействует с базой данных, это разъединяет решения "как часто пользовательский интерфейс должен запрашивать больше данных?" из "как часто я должен проверять свою базу данных на наличие обновлений?"

2 голосов
/ 01 ноября 2011

Удостоверьтесь, что вы не используете setInterval, но используете обратные вызовы, когда ваш вызов ajax успешен, иначе у вас может быть задержка вызовов, которые застряли.

Также выВозможно, вы захотите использовать некоторые методы длительного опроса, такие как websockets, comet или server-sent-events.

0 голосов
/ 02 ноября 2011

Вероятно, лучше использовать SJAX (синхронный), если вам действительно нужно делать запрос каждую секунду.Это поможет сократить количество незавершенных звонков.потому что он делает второй запрос после получения первого ответа.например:

    funftion get_data(){

                   if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            }
            else{// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.open("GET", url ,**false**);
            xmlhttp.send(null);
                            return xmlhttp.responseText;
                     }

используйте false в методе open (), чтобы синхронизировать его

0 голосов
/ 01 ноября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...