客户端如何能够在浏览器(客户端)上执行MongoDB查询,以及它如何自动更新到服务器端? DDP协议如何工作?
mongodb如何在客户端工作?
答案 0 :(得分:4)
Meteor在名为Minimongo的客户端中运行仅限JavaScript的Mongo版本。它使用 DDP 协议将结果发送回服务器,如果allow/deny规则允许,服务器又将其写入底层MongoDB。您可以在http://docs.meteor.com了解更多有关Minimong,DDP和反应性的信息。
Minimongo本质上是纯JavaScript中Mongo的内存中非持久性实现。它充当本地缓存,仅存储此客户端正在使用的数据库的子集。客户端(查找)上的查询直接从此缓存中提供,而无需与服务器通信。
这Quora answer from the Meteor CEO解释了Minimongo如何运作:
嗨,我写了(第一个版本)Minimongo :)是的,它只使用JavaScript对象来表示Mongo文档,我重新实现了Mongo查询并更新了JavaScript中的$ -operators(除了少数例外,如docs。)困难的部分是弄清楚运算符的确切语义,因为10gen文档没有详细介绍边缘情况。所以我保持一个Mongo shell打开,并弄清楚mongod如何处理每个边缘情况,然后写一个minimongo单元测试,以确保它做同样的事情。
除了10gen原语之外,它还有代码来保存针对数据库的实时查询列表(Meteor的observe()API)并发送添加/删除/移动/更改消息以使查询保持最新。这相当于在对象发生变化时检查实时查询列表。
[...]
还有一些代码用于执行数据库快照和恢复,用于实现延迟补偿(分叉数据库以在本地应用预测的更改,然后将其回滚并将其替换为来自服务器的官方结果)到达。)