Я играю с созданием приложения чата с использованием PHP и CodeIgniter.
Для этого я реализую кеш-буфер с memcached для хранения самых последних сообщений чата в памяти, уменьшая нагрузку набаза данных.Я хочу сделать следующее:
- Когда приходит сообщение, я сохраняю его в memcached, используя в качестве ключа текущую минуту (YYYY-MM-DD-HH-MM).Нет ввода-вывода базы данных.Идея заключается в том, что все сообщения с одной и той же минуты собираются под одним и тем же ключом.
- Пользователи получают новые сообщения чата, также извлеченные из memcached (сейчас я использую длинный опрос, но это переместится в WebSockets подNode.js по очевидным причинам производительности).Опять же, никаких операций ввода-вывода базы данных не происходит.
- Автоматический серверный скрипт (cronjob) будет запускаться раз в 5 минут, собирая данные из кэша за последние 5 минут и вставляя сообщения в базу данных.
- Объекты memcached устаревают через 6 минут, поэтому нам никогда не нужно хранить в памяти данные сообщений более 6 минут
Это в общей сложности одна операция записи в базу данных на 5минуты и ноль операций чтения базы данных.
Это звучит выполнимо?Есть ли лучший (возможно, даже встроенный?) Способ использования memcached для этой цели?
Обновление : я немного экспериментировал сейчас, и у меня есть идеядля ярлыка (читай: взломать ).Я могу временно «буферизовать» сообщения в серверном скрипте Node.js, пока не буду готов их сохранить.Объект Javascript / массив сообщений на сервере Node.js - это, по сути, кэш-память.
Итак: каждые N сообщений / секунд я могу передавать буферизованные сообщения (содержимое массива JS)в мою базу данных, используя любой метод, который я хочу, так как он не будет вызываться очень часто.
Тем не менее, я беспокоюсь, что это может нанести ущерб процессу сервера Node.js, так как он, вероятно, не будет наслаждаться переносомвокруг этого массива 200 КБ.
Есть какие-нибудь мысли по поводу этой стратегии?Это совершенно безумно?