Скорость соединения MySQL против доступа к файлу PHP - PullRequest
3 голосов
/ 22 декабря 2011

Предположим, что у меня есть простая установка VPS с LAMP (то есть с PHP и MySQL на одном сервере и без каких-либо других строк). И предположим, что я хочу создать на своем веб-сайте самостоятельно написанный клиент для чата ajax.

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

Какой был бы «лучший» способ сделать это (с точки зрения загрузки системы)? Далее под «событием» подразумевается «любой участник, говорящий что-либо в чате». Понятно, что это можно использовать и для более общего характера.

(A) Использовать MySQL, каждую секунду подключаясь к БД и запрашивая события. ГДЕ member_id = $ member_id? (а затем удаляю их все, чтобы они выбирались только один раз)

(B) Создать файл $ member_id.php и добавить к нему события (в формате PHP, чтобы его можно было включить, а затем очистить или удалить файл при следующем обновлении?

(C) Кто-нибудь знает другие полезные альтернативы?

Ответы [ 3 ]

1 голос
/ 22 декабря 2011

Как на А, так и на Б вы все еще эффективно опрашиваете. Вы либо будете опрашивать MySQL, который на самом деле не так уж плох, или вы можете получить уведомление на select() об изменении файла, НО вам все равно нужно будет проанализировать, чтобы убедиться, что новые данные правильные данные на стороне файла. 1002 *

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

Однако я рекомендую вам изучить функции msg_send() и msg_receive() (из PHP), чтобы поместить эти данные в основную очередь сообщений. Похоже, ваша проблема связана с очередью сообщений, которая должна решаться этим механизмом.

1 голос
/ 22 декабря 2011

Альтернативой может быть использование сокетного соединения.Каждый человек, подключенный к демону сервера сокетов, сможет отправить сообщение демону, после чего демон отправит сообщение всем или частичному списку подписчиков, что делает чат мгновенным без необходимости сохранять данные.1001 *

Хороший способ создания соединений сокетов от клиента - это сокет ввода-вывода.См. Ниже.

http://socket.io/

Хорошей технологией для создания демона сервера сокетов является node.js.Это управляемая событиями на стороне сервера библиотека на основе JavaScript.Очень эффективно для таких вещей.См. Ниже.

http://nodejs.org/

0 голосов
/ 22 декабря 2011

Кто-нибудь знает какие-нибудь другие полезные альтернативы?

Если вы ищете простые решения на PHP, я могу предложить 2 способа:

Кэш

Это означает, что вы сохраняете MySQL для хранения данных, но устанавливаете APC (это решение является самым простым и быстрым для небольших серверов и приложений) или Memcached (лучше для использования ширины нескольких серверов).Для каждого запроса на чтение вы проверяете APC / Memcached для ваших данных и спрашиваете MySQL, только если ваш кеш удален или обновлен.И при каждом запросе записи вы вставляете данные в MySQL и обновляете кеш.

Другая БД

В этом случае вы меняете MySQL на одну из баз данных на базе памяти (пример MongoDB).И вы можете не бояться использования жесткого диска.

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