Использование memcached в качестве буфера базы данных для сообщений чата

Я играю с созданием чат-приложения с использованием PHP и CodeIgniter.

Для этого я реализую кеш-буфер с memcached для хранения последних сообщений чата в памяти, уменьшая нагрузку на базу данных. Я хочу сделать следующее:

  1. Когда приходит сообщение, я сохраняю его в memcached с использованием текущей минуты (YYYY-MM-DD-HH-MM) в качестве ключа. Входы ввода-вывода отсутствуют. Идея состоит в том, что все сообщения с той же минуты собираются под одним и тем же ключом.
  2. Пользователи получают новые сообщения чата, также извлеченные из memcached (сейчас я использую длинный опрос, но это приведет к появлению WebSockets под Node.js по очевидным причинам производительности). Опять же, никакого ввода-вывода базы данных не было.
  3. Автоматический серверный скрипт (cronjob) запускается один раз каждые 5 минут, собирая memcached данные за последние 5 минут и вставляя сообщения в базу данных.
  4. Объекты memcached будут устаревать через 6 минут, поэтому нам не нужно хранить в памяти более 6 минут сообщений

Это в общей сложности одна операция записи базы данных за 5 минут и нулевые операции чтения базы данных.

Является ли это возможным? Есть ли лучший (возможно, встроенный?) Способ использования memcached для этой цели?


Обновление : сейчас я немного экспериментирую, и у меня есть идея для ярлыка (читай: взломать ). Я могу «буферизовать» сообщения временно в сценарии сервера Node.js, пока я не буду готов их хранить. Объект / массив Javascript на сервере Node.js в основном представляет собой кеш памяти.

Итак: каждый N сообщений / секунд я могу передать буферизованные сообщения (содержимое массива JS) в мою базу данных, используя любой метод, который я хочу, поскольку он не будет вызываться очень часто.

Тем не менее, я беспокоюсь, что это может повредить серверному процессу Node.js, поскольку, вероятно, ему не понравится переносить этот массив размером 200 КБ.

Любые мысли по этой стратегии? Это совершенно безумие?

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

Почему не использовать INSERT DELAYED ? Он предлагает вам почти ту же функциональность, которую вы пытаетесь достичь без необходимости memcached.

В любом случае, ваше решение выглядит хорошо.