【问题标题】:Node chatroom, store messages in array or just redis?节点聊天室,将消息存储在数组中还是仅 redis?
【发布时间】:2016-01-08 12:33:54
【问题描述】:

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

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

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

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

什么是我想要完成的最合乎逻辑的方法?我应该只使用 Redis 并放弃这个吗?一些消息队列或发布订阅服务器怎么样? (我尽量不让这件事复杂化,因为它只是给朋友的原型)。

谢谢,

【问题讨论】:

  • 顺便说一句,我并不是一个真正的节点开发者,只是为了帮助一个朋友。

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


【解决方案1】:

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

【讨论】:

  • 我完全同意——我只是担心每次到 redis 的往返,还是我过于谨慎?
  • 是的,你是,这是一件好事。但是,当您的应用程序必须处理多个用户时,请务必查看后果。使用您的设计,系统将变得非常复杂。软件设计本身就是一门艺术@StackOverflowed
  • 如果我的回答符合你的期望,那么请为这个社区的利益选择答案@StackOverflowed
猜你喜欢
  • 1970-01-01
  • 2018-02-06
  • 2014-02-19
  • 2012-10-27
  • 2016-01-18
  • 2018-09-30
  • 2012-01-11
  • 1970-01-01
  • 2014-03-11
相关资源
最近更新 更多