我正在使用PHP和CodeIgniter構建聊天應用程序。使用memcached作爲聊天消息的數據庫緩衝區
爲此,我使用memcached實現緩存「緩衝區」,以將最近的聊天消息保存在內存中,從而減少數據庫的負載。我想這樣做是:
- 當消息到達時,我使用了當前分鐘(YYYY-MM-DD-HH-MM)爲重點,將其保存在memcached的。沒有涉及數據庫I/O。這個想法是,來自同一分鐘的所有消息都在同一個密鑰下收集。
- 用戶收到從memcached中獲取的新聊天消息(現在我使用長輪詢,但由於顯而易見的性能原因,這將移到Node.js下的WebSockets中)。同樣,沒有涉及數據庫I/O。
- 自動服務器腳本(cronjob)將每5分鐘運行一次,收集最近5分鐘的memcached數據並將消息插入數據庫。
- Memcached的對象設置6分鐘後去陳舊,所以我們從來沒有需要保持超過6分鐘值得的消息數據在內存中
這對於每5分鐘的總一個數據庫寫操作和零數據庫讀取操作。
這聽起來可行嗎?有沒有更好的(甚至可能是內置的)的方式來使用memcached達到這個目的?
更新:我一直在嘗試,現在一點點,我有一個快捷方式(閱讀:破解)的想法。我可以在Node.js服務器腳本中暫時緩衝消息,直到我準備好存儲它們。 Node.js服務器中的Javascript對象/消息數組基本上是一個內存緩存 - 種類。所以:每N條消息/秒,我可以使用任何我想要的方法將緩衝消息(JS數組的內容)傳遞到我的數據庫,因爲它不會經常被調用。
但是,我擔心這可能會削弱Node.js服務器進程,因爲它可能不會享受攜帶這個200 KB陣列。
對此策略有何看法?它完全瘋了嗎?
需要研究的技術:COMET&erlang/jabber(Facebook使用這些)OR:HTML5和Web套接字(帶有閃存套接字後備 - 谷歌爲這些) – 2011-07-14 19:52:18