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

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

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

  1. Когда приходит сообщение, я сохраняю его в memcached, используя текущую минуту (ГГГГ-ММ-ДД-ЧЧ-ММ) в качестве ключа. Никаких операций ввода-вывода базы данных. Идея состоит в том, что все сообщения с одной минуты собираются под одним и тем же ключом.
  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 КБ.

Есть мысли по поводу этой стратегии? Это полное безумие?

6
задан Jens Roland 15 June 2011 в 18:20
поделиться