MongoDB实时查询

MongoDB实时查询,mongodb,real-time,rethinkdb,Mongodb,Real Time,Rethinkdb,我听说过RejectDB,因为我正在开发一款多人在线游戏,我认为如果MongoDB推动更改(比如新行),而不是拉动行,那么服务器端和客户端的速度都会快得多 是否有任何包装器或技术可以对MongoDB进行实时查询?您可以利用。在最低级别,这将需要首先将所有更改写入capped集合,然后由某种工作者应用它们(一种事件源模式)。这是应用程序体系结构的一个严重变化,因此它可能不是您想要的 一种更通用的方法是监视,这是一个特殊的封顶集合,用于同步主节点和辅助节点,并包含对文档执行的所有操作,因此不需要更改

我听说过RejectDB,因为我正在开发一款多人在线游戏,我认为如果MongoDB推动更改(比如新行),而不是拉动行,那么服务器端和客户端的速度都会快得多

是否有任何包装器或技术可以对MongoDB进行实时查询?

您可以利用。在最低级别,这将需要首先将所有更改写入capped集合,然后由某种工作者应用它们(一种事件源模式)。这是应用程序体系结构的一个严重变化,因此它可能不是您想要的

一种更通用的方法是监视,这是一个特殊的封顶集合,用于同步主节点和辅助节点,并包含对文档执行的所有操作,因此不需要更改应用程序体系结构


尽管如此,这还是比RequiredDB公开的要低一些,特别是因为您需要执行一个差异。有一些差异可以隐藏一些复杂性,但我没有使用它们,我不知道您使用的是什么编程语言。是的,它几乎建立在发布/订阅之上,隐藏了大部分复杂性,因此通常是可能的,尽管它似乎比RejectionDB更复杂。

非常棒的答案,谢谢。还有一个问题,在使用
tail oplog
检测到更改后,我是否应该对
mongo
实例进行新的查询并获取记录?嗯,既然你这么说了,这可能是解决差异问题的一个非常简单的方法;-)我的意思是,您不必这样做,因为oplog信息足以将文档提升到当前状态,但另一方面,这需要理解并重新实现mongodb如何应用这些操作,这相对来说比较困难。重新获取肯定要容易得多,但会引起更多的查询,因此这是一种代码复杂性/性能权衡。从重新查询开始,如果性能足够,您就完成了,如果不是重复的话。啊哈,明白了!因此,我认为这也与性能问题直接相关。出于好奇,为什么不直接使用数据库呢?它也是一个NoSQL文档存储库,您可以随时获取ChangeFeed。我并不是想强求,我只是好奇而已@JorgeSilva很高兴有你在这里!您知道,mongodb有大量的文章、解决的问题和驱动程序。另外,大多数NodeJS开发人员使用MongoDB是因为
Mongoose
。老实说,我认为MongoDB中的复制和分片工作得更好。