节点聊天室,将消息存储在数组中还是只是 redis?
Node chatroom, store messages in array or just redis?
我正在编写一个多聊天室应用程序,它需要持久存储对话(即新用户应该能够看到旧消息)。如果有帮助,我正在使用 socket.io。
目前,当用户登录到一个房间时,我的节点应用程序会检查是否有人去过那个房间(并且每个房间都有一个等级父级,例如,名为 Pets 的房间可能属于北美,因为会有一个单独的欧洲宠物室)。
如果这是某个人第一次进入该房间一段时间,它会从该房间的 redis 加载所有消息。 (最终,redis 存储的对话进入 MySQL)。
所以我有一个名为 messages["PARENT"]["ROOM"]
的多维数组,这样 messages["North America"]["Pets"]
将是一个包含该房间所有消息的数组。除了误解 JS 中的数组是如何工作的(如这个问题中所解释的:javascript push multidimensional array),感觉我把情况复杂化了。我使用 MD 数组的原因是往返请求来自 Redis 的所有消息以获取活动房间没有意义。
对于我要实现的目标,最合乎逻辑的方法是什么?我应该只使用 Redis 而放弃它吗?一些消息队列或者 pubsub 服务器怎么样? (我尽量不让这个复杂化,因为它只是一个朋友的原型)。
谢谢,
从体系结构的角度来看,这是一个糟糕的设计。如果明天您想通过设置更多服务器来扩展此应用程序怎么办?当然,这些多维数组将特定于每个节点实例。解耦存储有其自身的优势,其中之一就是向外扩展——存储现在在多台服务器之间共享。这完全取决于您想要实现的目标。如果您的 MD 大小增加,您也可能 运行 内存不足,从而影响您的应用程序性能。
我正在编写一个多聊天室应用程序,它需要持久存储对话(即新用户应该能够看到旧消息)。如果有帮助,我正在使用 socket.io。
目前,当用户登录到一个房间时,我的节点应用程序会检查是否有人去过那个房间(并且每个房间都有一个等级父级,例如,名为 Pets 的房间可能属于北美,因为会有一个单独的欧洲宠物室)。
如果这是某个人第一次进入该房间一段时间,它会从该房间的 redis 加载所有消息。 (最终,redis 存储的对话进入 MySQL)。
所以我有一个名为 messages["PARENT"]["ROOM"]
的多维数组,这样 messages["North America"]["Pets"]
将是一个包含该房间所有消息的数组。除了误解 JS 中的数组是如何工作的(如这个问题中所解释的:javascript push multidimensional array),感觉我把情况复杂化了。我使用 MD 数组的原因是往返请求来自 Redis 的所有消息以获取活动房间没有意义。
对于我要实现的目标,最合乎逻辑的方法是什么?我应该只使用 Redis 而放弃它吗?一些消息队列或者 pubsub 服务器怎么样? (我尽量不让这个复杂化,因为它只是一个朋友的原型)。
谢谢,
从体系结构的角度来看,这是一个糟糕的设计。如果明天您想通过设置更多服务器来扩展此应用程序怎么办?当然,这些多维数组将特定于每个节点实例。解耦存储有其自身的优势,其中之一就是向外扩展——存储现在在多台服务器之间共享。这完全取决于您想要实现的目标。如果您的 MD 大小增加,您也可能 运行 内存不足,从而影响您的应用程序性能。