使用redis和mongodb是否有意义?

时间:2011-07-26 05:08:57

标签: mongodb redis

我们有很多数据,决定使用mongodb,效果很好。

我们开始使用redis跟踪实时应用中的活跃用户。我们也开始用redis做一些发布/子频道的东西。

我们的下一步行动可能是将mongodb用于休眠数据,将redis用于活动数据。这方面的一个例子是,我们所有的用户都存储在mongodb中,但是当他们登录时,我们会将该数据的副本移动到redis以便快速访问。我们还将其游戏活动等内容存储在redis中并相应地使用数据。当用户注销时,我们将保存mongo所需的任何内容,直到它再次需要并加载到redis中。

我们一直在研究的一件事是在崩溃时保留redis。系统上的用户活动是我们不希望在崩溃时丢失的有意义的数据,如果我们只是在事后记录数据,我们是否应该在每次事件后保存mongo中重要数据的备份?然后崩溃redis可以从mongo恢复?

有没有更好的方法来实现我们想要实现的目标?

谢谢!

1 个答案:

答案 0 :(得分:6)

好的,所以有几个角度来攻击这个问题。首先要指出的是redis确实有user-configurable persistence

  

系统上的用户活动是我们不想在崩溃时丢失的有意义的数据,如果我们只是在事后记录数据,我们是否应该在每次事件后保存mongo中重要数据的备份?

公平地说,MongoDB的默认设置是每60秒刷新一次磁盘。所以你仍然有60秒的数据丢失窗口。

  1. 您可以使用journaling并将该窗口放到100毫秒,但这会对IO造成更大的负担。
  2. 您还可以将您的编写器配置为等待该日志刷新(WriteConcern:fsync),但这会显着减慢写入速度。
  3.   

    有没有更好的方法来实现我们想要实现的目标?

    真的取决于你想要达到的目标。

    • 您可以处理哪种类型的数据丢失?
    • Redis has replication,你在用它吗?这是否解决了大部分数据丢失问题?
    • 您说您正在使用PubSub功能,这涵盖了多少个节点?您的数据是否因此而被充分复制?

    无论哪种方式,这都是一个有点复杂的问题。 MongoDB可能会解决您的问题,但复制也可以解决这些问题。取决于您的舒适度。