8

我有兴趣使用Meteor将长时间(多个小时)与网络断开连接的框架创建应用程序。我相信流星将本地数据存储在 RAM 中的 mini-mongodbjs结构中。如果用户关闭浏览器或刷新页面,所有本地更改都将丢失。如果将本地更改持久保存到磁盘(localStorage??indexedDB),那就太好了。Meteor 有机会吗?

相关问题... Meteor 如何处理文档冲突?换句话说,如果 2 个用户编辑同一个 MongoDB JSON 文档,那么该冲突如何解决?乐观锁定?

4

1 回答 1

4

冲突解决是“最后一位作家获胜”。

更具体地说,客户端上的每个 MongoDB 插入/更新/删除操作都映射到一个 RPC。来自给定客户端的 RPC 总是按顺序播放。来自不同客户端的 RPC 在服务器上交错,没有任何特定的顺序保证。

如果客户端在断开连接时尝试发出 RPC,这些 RPC 会排队等待客户端重新连接,然后按顺序播放到服务器。当多个客户端执行离线 RPC 时,它们最终在服务器上运行的顺序高度依赖于每个客户端重新连接的确切时间。

对于像 MongoDB 的一些离线突变$inc$addToSet,这个模型工作得很好。但是许多常见的修饰符(例如$set)在长时间断开连接时表现不佳,因为突变可能会与来自其他客户端的干预更改发生冲突。

因此,构建“离线”应用程序不仅仅是持久化本地数据库。您还需要定义实现某种类型的冲突解决的 RPC。最终,我们希望有实现各种解决方案的交钥匙包。

于 2012-10-30T03:45:40.150 回答