【问题标题】:Would this be a good scenario to combine MongoDB and Redis? [closed]这会是结合 MongoDB 和 Redis 的好方案吗? [关闭]
【发布时间】:2014-10-02 05:59:49
【问题描述】:

我正在使用具有许多实时功能的 Node.js 开发一个站点。一个特点是,用户可以在某个频道发布内容,这将立即推送给观看同一频道的每个人。

我正在尝试找出解决此问题的最佳方法。 MongoDB 的数据结构非常适合我的需求,但 Redis Pub/Sub 功能似乎非常适合这个问题。

所以我想我可以将完整的数据集存储在 MongoDB 中,然后在 Redis 中添加一个引用以将其推送到必要的通道。然后这些频道的订阅客户端可以从 MongoDB 数据库中读取完整的数据。

这有意义还是我错过了什么?

谢谢!

【问题讨论】:

  • 这是一个永恒的哲学问题:要解决我的问题,我应该使用 0、1 或更多方法/工具/技术。如果您的数据是面向文档的并且您需要它,那么 MongoDB 就是候选。如果您正在寻找快速的性能 - Redis 是一个不错的选择。我敢肯定,有一些方法可以使用这两种技术中的一种来实现您所描述的一切,无论是两者,还是不使用或其他技术。

标签: node.js mongodb redis nosql


【解决方案1】:

这是有道理的。您可以原生使用 Redis,也可以通过 socket.io API 使用 Redis,并将 MongoDB 用于持久化数据。

唯一的问题是要意识到 Redis pub/sub 不提供任何排队功能。 Redis 不缓冲通知,它们在同一个事件循环迭代中直接从发布者套接字到订阅者套接字。这很快,但是如果订阅者关闭了它的连接,它可能会在重新建立连接之前丢失一些项目。根本无法保证交货。

但是,如果需要,在断开连接后重新连接的订阅者可以使用 MongoDB 数据来获取它错过的项目。

【讨论】:

  • 我会镜像 MongoDB 数据库中的信息并使用 Redis 进行实时体验。如果发生页面重新加载,应用程序将从 MongoDB 中提取数据。我想,我不能使用 Redis 并使用 Socket.IO 广播到某些频道的功能并将所有内容存储在 MongoDB 中。 Redis 中的数据会在一段时间后过期,所以如果发生写入,数据会被广播并存储在 MongoDB 中。这样我就不需要 Redis。但我担心这不是真正可扩展的,因为我会依赖一个 Node.js 进程(对吗?)。还是 Redis 在这种情况下只是多余的?
猜你喜欢
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2021-04-27
相关资源
最近更新 更多