【问题标题】:Disconnected meteor application断开的流星应用程序
【发布时间】:2012-10-29 18:26:33
【问题描述】:

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

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

【问题讨论】:

    标签: meteor local-storage


    【解决方案1】:

    冲突解决是“最后的作者获胜”。

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

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

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

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

    【讨论】:

    • 如果meteor可以将OT添加为一个bundle(例如sharejs),那么冲突可能会以更好的方式解决。
    • 我很欣赏第二部分的答案。在没有无线/无线性能差的博览会上,平板电脑应用程序用于姓名/电子邮件收集的用例怎么样?在这种情况下,它只插入到集合中?如何持久保存到本地存储,或者甚至需要?
    猜你喜欢
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 2014-03-04
    相关资源
    最近更新 更多