Python 发布/订阅数据库和客户端编程数据库之间有什么区别?
我有两个Python 发布/订阅数据库和客户端编程数据库之间有什么区别?,python,mongodb,redis,publish-subscribe,Python,Mongodb,Redis,Publish Subscribe,我有两个nosqldbms:MongoDB和Redis: Redis拥有著名的PubSub,MongoDB拥有与RDBMS最接近的逻辑,它最适合从SQL过渡到NOSQL,由于MongoDB在python字典和列表中使用,例如,如果用户添加或删除产品,则更改的是列表的长度,因此,代码可以在此处作为通知者编写 那么,在这里使用Redis的好处在哪里呢?我已经在ops日志上使用了Redis pub sub和Mongodb可定制游标(这是一个有上限的集合,请参见.html和)来创建我自己的游标。主要区别
nosqldbms
:MongoDB
和Redis
:
Redis
拥有著名的PubSub
,MongoDB
拥有与RDBMS
最接近的逻辑,它最适合从SQL
过渡到NOSQL
,由于MongoDB
在python
字典和列表中使用,例如,如果用户添加或删除产品,则更改的是列表的长度,因此,代码可以在此处作为通知者编写
那么,在这里使用Redis的好处在哪里呢?我已经在ops日志上使用了Redis pub sub和Mongodb可定制游标(这是一个有上限的集合,请参见.html和)来创建我自己的游标。主要区别在于,您是否希望使用Mongo为pub sub构建自己的逻辑。从表面上看,酒吧酒吧间似乎很简单,但与其他任何事情一样,它有很多边缘案例,你必须进行编程。Redis'pub sub已经为您完成了大部分管道工作,因此您可以担心高级编码问题,而将低级内容留给已经解决问题的系统
Mongo战胜Redis的最大优势在于,你可以更好地控制如何建设自己的酒吧,因此,如果你有特殊需求,它可能是一个更好的选择。例如,使用Redis(开箱即用),如果客户机断开连接,10分钟后重新连接,它将在这段时间内丢失消息,并且无法恢复。使用Mongo,客户端可以返回并获取这些消息(注意,它必须从头到尾读取整个封顶集合)-记住,您必须跟踪发送给每个客户端的最后一条消息,等等。Redis有一些解决方法,以便它能够实现这一点-请参见一个示例
如果您需要速度,需要支持大量客户机和大量订阅频道,Redis是一个不错的选择。在我提到的实现中,Redis是迄今为止最快的,能够处理最多数量的客户端。当然,这可能反映了我们的Pub-Sub实现的问题,而不是mongo总体性能的反映。尽管如此,我们确实在Mongo中遇到了全局写锁问题,这在最新版本(2.2?)中得到了缓解
总而言之,如果你需要一些专门的东西,Mongo可能是你的正确选择。但是,如果您希望在大负载情况下直接发送消息,我不会尝试重新发明轮子,而是使用Redis。我已经在ops日志上使用了Redis pub sub和Mongodb可定制游标(这是一个有上限的集合,请参见.html和)来创建自己的游标。主要区别在于,您是否希望使用Mongo为pub sub构建自己的逻辑。从表面上看,酒吧酒吧间似乎很简单,但与其他任何事情一样,它有很多边缘案例,你必须进行编程。Redis'pub sub已经为您完成了大部分管道工作,因此您可以担心高级编码问题,而将低级内容留给已经解决问题的系统
Mongo战胜Redis的最大优势在于,你可以更好地控制如何建设自己的酒吧,因此,如果你有特殊需求,它可能是一个更好的选择。例如,使用Redis(开箱即用),如果客户机断开连接,10分钟后重新连接,它将在这段时间内丢失消息,并且无法恢复。使用Mongo,客户端可以返回并获取这些消息(注意,它必须从头到尾读取整个封顶集合)-记住,您必须跟踪发送给每个客户端的最后一条消息,等等。Redis有一些解决方法,以便它能够实现这一点-请参见一个示例
如果您需要速度,需要支持大量客户机和大量订阅频道,Redis是一个不错的选择。在我提到的实现中,Redis是迄今为止最快的,能够处理最多数量的客户端。当然,这可能反映了我们的Pub-Sub实现的问题,而不是mongo总体性能的反映。尽管如此,我们确实在Mongo中遇到了全局写锁问题,这在最新版本(2.2?)中得到了缓解
总而言之,如果你需要一些专门的东西,Mongo可能是你的正确选择。但是,如果您希望在大负载情况下使用开箱即用的直截了当的消息传递,我不会尝试重新发明轮子,而是使用Redis。您这里所说的notificator是什么意思?mongodb没有触发器?据我所知,pubsub与pubsub有关吗?不,MongoDB没有触发器或类似的机制来通知客户端进行更改。@RostyslavDzinko:MongoDB支持有上限的集合,如复制oplog,有些人使用过它。@Stennie,限制太多了,不能说可定制游标是发布/订阅的替代品,尽管我同意它可以应用于狭窄的任务领域。这里的notificator是什么意思?mongodb没有触发器?据我所知,pubsub与pubsub有关吗?不,MongoDB没有触发器或类似的机制来通知客户端进行更改。@RostyslavDzinko:MongoDB支持有上限的集合,如复制oplog,有些人使用过它。@Stennie,限制太多了,不能说可定制游标是发布/订阅的替代品,尽管我同意它可以应用于狭窄的任务领域。谢谢你的回复,所以,如果我同时使用这两种游标,我如何从MongoDB访问Redis,或者必须复制某些数据?这在很大程度上取决于您的应用程序、您设计模式的方式以及数据需要的方向