我正在编写一个多聊天室应用程序,它需要会话的持久存储(即新用户应该能够看到旧消息)。我在用socket.io如果有帮助的话。
目前,当用户登录某个房间时,我的节点应用程序会检查是否有人去过该房间(并且每个房间都有一个层次化的父级,例如,名为pets的房间可能属于北美,因为那里有一个单独的欧洲宠物房间)。
如果这是第一次有人进入这个房间一段时间,它会从redis加载该房间的所有消息。(最终redis存储的对话进入mysql)。
所以我有一个多维数组叫做messages["PARENT"]["ROOM"],这样messages["North America"]["Pets"]将是一个数组,其中包含该房间的所有消息。除了误解js中的数组是如何工作的(正如在这个问题中所解释的:javascript push multidimensional array)之外,感觉我把情况搞得太复杂了。我使用md数组的理由是,对于一个活动的房间,往返请求redis的所有消息是没有意义的。
对于我想要完成的事情,什么是最合乎逻辑的方法?我应该用redis放弃这个吗?有消息队列或者pubsub服务器吗?(我不想让这件事复杂化,因为它只是一个朋友的原型)。
谢谢您,

最佳答案

从建筑的角度来看,这是一个糟糕的设计。如果明天你想通过设置更多的服务器来扩展这个应用程序呢?当然,这些多维数组将特定于每个节点实例。分离存储有其自身的优点,其中一个优点是可以向外扩展—存储现在在多个服务器之间共享。这完全取决于你想要实现什么。如果MD的大小增加,也可能会耗尽内存,从而影响应用程序的性能。

09-18 02:30
查看更多