1

我有两个NoSQL DBMSMongoDBRedis

Redis有著名的PubSub,具有最适合从to转换MongoDB的最接近的逻辑,并且由于使用 in并且例如,如果用户添加或删除产品,则更改的是 的长度,因此,代码可以在这里写成,RDBMSSQLNOSQLMongoDBpython DictionariesListslistnotificator

那么在Redis这里使用的好处在哪里呢?

4

1 回答 1

7

我在操作日志上使用了 Redis pub-sub 和 Mongodb 可尾游标(这是一个上限集合 - 请参阅http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog .html和http://blog.mongodb.org/post/29495793738/pubsub-with-mongodb)来鞭打我自己的。主要区别在于您是否要使用 Mongo 构建自己的发布-订阅逻辑。从表面上看,pub-sub 似乎很简单,但与任何事情一样,它有很多你必须编程的边缘情况。Redis 的 pub-sub 已经为您完成了大部分管道工作,因此您可以担心高级编码问题并将低级内容留给已经解决问题的系统。

Mongo 对 Redis 的最大胜利在于,您可以更好地控制如何构建 pub-sub,因此如果您有特殊需求,它可能是更好的选择。例如,使用 Redis(开箱即用),如果客户端断开连接,然后在 10 分钟后重新连接,那么在这中间的几分钟内,它会丢失消息,并且无法取回它们。使用 Mongo,客户端可以返回并获取这些消息(需要注意的是它必须从头到尾读取整个封顶集合) - 请记住,您将必须跟踪传递给每个客户端的最后一条消息,等等。有Redis 的变通方法,以便它可以实现这一点 - 请参阅Redis Pub/Sub with Reliability作为示例。

如果您需要速度并支持大量客户端和大量订阅渠道,那么 Redis 是您的最佳选择。在我提到的实现中,Redis 是迄今为止最快的,能够处理最多的客户端。当然,这可能反映了我们的 Pub-Sub 实现存在问题,而不是反映 mongo 的一般性能。虽然,我们确实遇到了 Mongo 中全局写入锁定的问题,该问题已在最新版本(2.2?)中得到缓解。

总而言之,如果您需要专门的东西,Mongo 可能是您的正确选择。但是,如果您想要直接的消息传递,即开箱即用的大负载,我不会尝试重新发明轮子,而是使用 Redis。

于 2012-09-18T12:06:25.973 回答