如何在请求之间保留MongoDB游标?

时间:2013-06-09 12:16:33

标签: php ruby-on-rails node.js mongodb web-applications

在网络服务器竞赛中:

为了避免重新查询(使用find),可以尝试在请求之间保持find返回的游标引用。 Cursor对象是存储例如套接字连接的复杂对象。如何存储此类对象以避免重新查询后续Web请求?我在Node.js工作,但任何建议都有帮助(无论语言如何:rails,C#,Java,PHP)。

(我正在使用持久会话)

1 个答案:

答案 0 :(得分:1)

Facebook和Twitter的流功能比对数据库的简单查询更复杂。像这样的系统往往在其架构中有两个主要的后端组件,为您提供数据:速度慢和速度快。

1)第一个后端系统是您的数据库,通过查询访问以从流中获取结果页面(作为某人的Twitter提要或其fb提要)。当您翻页到底部或单击“更多结果”时,它只会增加页面变量并查询当前流的该页面的API。

2)第二个是一个完全独立的系统,它通过websockets或针对API调用的分页向您的页面发送实时更新。这是您架构的“快速”部分。这可能不是来自数据库,而是来自某个地方的队列。从这个队列中,处理程序将您的数据发送到您的页面,该页面是订阅者。

系统的设计是这样的,因为为了实现巨大的扩展,您不能依赖于实时更新数据库。这是大批量完成的。因此,您通过架构的快速部分运行该数据的一小部分,了解用户从“快速”后端获取它的方式可能看起来不会最终看起来如何在'慢'后端看到,但是它足够接近。

所以...故事的道德:

您不希望持久保存数据库游标。您想要1)我是否需要更新才能实时2)如果是这样,我如何构建我的系统,以便第一次调用可以获取我的大部分数据,第二次调用/机制可以使其保持最新。