对于OfflineFirst设计中的客户端缓存策略,有没有人知道聪明或标准的解决方案。
我有一个Ionic2 (Angular2/TypeScript)客户端,正在尝试遵循OfflineFirst原则,所以假设有一个不可预测的连接。我只想下载在多个用户之间以多对多关系共享的对象,这些对象自上次客户端更新以来发生了更改,并且仅使用自上次更新以来的更改来更新客户端的本地存储。
这是我目前的印象:-考虑到先离线,任何推送策略似乎都没有意义?所以一些建议是使用可观察/观察者模式,但这使用了推送策略,我认为这不是一个很好的解决方案。+我已经考虑过在服务器上存储一个user-lastupdate键值对以及每个对象的lastupdate ts,然后在每次客户端联机并ping新的更新时比较这2个值。如果有更新,则使用比上次用户更新ts更新的ts下载这些对象。-我也看过一些关于服务人员的提及,但对此并不熟悉。-其他人选择昂贵的解决方案,如简单地对定期ping进行完全刷新,即每天,每4小时左右。
任何见解都会很棒。
发布于 2017-08-15 05:50:09
我在使用CouchDB (或相关技术,如Cloudant)的离线优先应用程序中看到的典型模式是执行所谓的每个用户一个数据库。基本思想是在每个用户注册应用程序时为他们分配一个CouchDB数据库。然后,只允许每个单独的用户读/写该用户的CouchDB数据库。像Hoodie或Cloudant特使(特使向客户端提供了每个用户一个数据库的“幻觉”)这样的工具可以帮助做到这一点:
这种方法适用于具有良好细分用户数据的应用程序(例如,个人待办事项列表),并且扩展得出奇地好。然而,当您想要在用户之间共享数据(例如,共享的待办事项列表),或者您想要对跨用户的聚合数据运行分析时,这种方法会带来挑战。
看起来你的应用程序属于“用户之间的共享数据”这一类。挑战在于,如何将用户数据库A中的共享数据放入用户数据库B中?在JSON语言中,这些共享数据将被表示为CouchDB文档。
一种体系结构是使用消息队列,并为每个用户数据库分配一个发布者和订阅者代理。这些代理将在服务器端运行,在您的安全策略中规定谁有权访问哪些数据。这些代理将订阅其他用户数据库中的数据的“通道”,而另一方面发布到数据的“通道”。这些通道可以由数据库中的文档中包含的特定属性来定义。当代理检测到所描述的事件时,它会运行筛选复制,将有问题的数据从一个用户数据库复制到另一个用户数据库。
https://stackoverflow.com/questions/45641874
复制相似问题