我正在编写一个需要持久存储对话的多聊天室应用程序(即新用户应该能够看到旧消息)。我用的是socket。如果有帮助,请输入IO。
目前,当用户登录到一个房间时,我的节点应用程序检查是否有人去过那个房间(每个房间都有一个分层父级,例如,名为宠物的房间可能属于北美,因为有一个单独的欧洲宠物房间)。
如果这是一个人第一次在房间里呆了一段时间,它会从redis中加载该房间的所有消息。(最终redis存储的对话进入MySQL)。
我有一个多维数组messages["PARENT"]["ROOM"]
,这样messages["North America"]["Pets"]
将是一个包含该房间所有消息的数组。除了误解了JS中的数组是如何工作的(正如在这个问题中解释的那样:javascript push多维数组),感觉我把情况弄得太复杂了。我使用MD阵列的理由是,对于一个活跃的房间,从Redis请求所有消息的往返是没有意义的。
谢谢你,
从架构的角度来看,这是一个糟糕的设计。如果明天您想通过设置更多的服务器来扩展这个应用程序,该怎么办?当然,这些多维数组将特定于每个节点实例。将存储解耦有其自身的优势,其中之一就是可以向外扩展——存储现在可以在多个服务器之间共享。这完全取决于你想要达到什么目标。如果MD的大小增加,还可能会耗尽内存,从而影响应用程序的性能。