节点聊天室,将消息存储在数组中还是只是redis?

时间:2015-10-10 18:02:46

标签: javascript node.js multidimensional-array redis publish-subscribe

我正在编写一个需要持久存储会话的多聊天室应用程序(即新用户应该能够看到旧消息)。如果有帮助,我会使用socket.io。

目前,当用户登录房间时,我的节点应用程序会检查是否有人去过那个房间(并且每个房间都有一个分层的父母,例如,名为Pets的房间可能属于北美,因为那里&# 39; d是一个独立的欧洲宠物房)。

如果这是一个人第一次进入房间一段时间,它将从该房间的redis加载所有消息。 (最终redis存储的对话进入MySQL)。

所以我有一个名为messages["PARENT"]["ROOM"]的多维数组,这样messages["North America"]["Pets"]就是一个包含该房间所有消息的数组。除了误解JS中的数组是如何工作的(正如在这个问题中所解释的那样:javascript push multidimensional array),感觉就像我在复杂化这种情况一样。我使用MD阵列的原因是,为了一个活跃的房间请求Redis的所有消息的往返行程是没有意义的。

对于我想要完成的事情,最合乎逻辑的方法是什么?我应该只使用Redis并放弃这个吗?一些消息队列或pubsub服务器怎么样? (我试图不要把它复杂化,因为它只是朋友的原型)。

谢谢,

1 个答案:

答案 0 :(得分:2)

从架构的角度来看,这是一个糟糕的设计。如果明天您想通过设置更多服务器来扩展此应用程序怎么办?当然,这些多维数组将特定于每个节点实例。解耦存储有其自身的优势,一个是向外扩展 - 现在存储在多个服务器之间共享。这一切都取决于你想要达到的目标。如果MD的大小增加,也可能会耗尽内存,从而影响应用程序的性能。

相关问题