在网络服务器竞赛中:
为了避免重新查询(使用find
),可以尝试在请求之间保持find
返回的游标引用。 Cursor
对象是存储例如套接字连接的复杂对象。如何存储此类对象以避免重新查询后续Web请求?我在Node.js工作,但任何建议都有帮助(无论语言如何:rails,C#,Java,PHP)。
(我正在使用持久会话)
答案 0 :(得分:1)
Facebook和Twitter的流功能比对数据库的简单查询更复杂。像这样的系统往往在其架构中有两个主要的后端组件,为您提供数据:速度慢和速度快。
1)第一个后端系统是您的数据库,通过查询访问以从流中获取结果页面(作为某人的Twitter提要或其fb提要)。当您翻页到底部或单击“更多结果”时,它只会增加页面变量并查询当前流的该页面的API。
2)第二个是一个完全独立的系统,它通过websockets或针对API调用的分页向您的页面发送实时更新。这是您架构的“快速”部分。这可能不是来自数据库,而是来自某个地方的队列。从这个队列中,处理程序将您的数据发送到您的页面,该页面是订阅者。
系统的设计是这样的,因为为了实现巨大的扩展,您不能依赖于实时更新数据库。这是大批量完成的。因此,您通过架构的快速部分运行该数据的一小部分,了解用户从“快速”后端获取它的方式可能看起来不会最终看起来如何在'慢'后端看到,但是它足够接近。
所以...故事的道德:
您不希望持久保存数据库游标。您想要1)我是否需要更新才能实时2)如果是这样,我如何构建我的系统,以便第一次调用可以获取我的大部分数据,第二次调用/机制可以使其保持最新。