离线Firebase

Mar*_*coS 11 couchdb offline-caching angularjs firebase pouchdb

我正在使用Firebase作为后端实现AngularJS Web应用程序; 它也应该脱机工作; 多用户同步问题应该非常有限,因为app - by design - 只允许离线时的数据条目.

我了解Firebase具有脱机功能,从某种意义上说,客户端可以承受临时网络连接故障:任何写入操作都将被延迟并缓存,直到网络再次出现.

我问是否存在任何可能性(或者是否计划实施它)以扩展Firebase离线功能,以使客户端能够在本地缓存服务器上(部分)数据的快照,从而为客户提供完整的离线体验,也提供读取操作.

我看到第三部分Firebase包装器存在,但它的文档非常"有限"(要善待...... :-).一个原生解决方案应该是首选...

更新:Frank van Puffelen发表评论后,我更有资格证明我的问题:

*Firebase本身是否支持其Web API中的脱机数据访问,或者是否会很快支持?*

Ton*_*gan 11

Firebase的替代方案可以解决JS应用程序的这个问题CouchDb (server) <=> PouchDb (JS client).如果你为AngularJS应用程序实现了一个漂亮的干净服务层,那么移植到PouchDb应该是相当直接的,因为它们都是NoSQL/JSON数据库.

PouchDb是一个Javascript API,可实现完全脱机的 CouchDb客户端.它可以自动检测和使用_local storage_,_IndexDb_或者_WebSQL_在线或离线时永久保留本地数据.PouchDb API可用于访问本地或远程数据库(只需更改URL),并在两者之间连接完整同步或过滤同步.有许多有用的PouchDb插件,代码示例和一个小的包装器库来支持AngularJS的Q promises API.

使用PouchDb,您可以在离线时安全地启动应用程序,然后几天后重新启动应用程序并将所有CUD数据更改同步到服务器.这可能导致更新冲突,因此CouchDb支持用于检测和跟踪此操作的记录版本控制.因此,您可能需要服务器端逻辑来解决这些冲突.对于具有离线同步和CouchDb关键功能的分布式系统而言,这是不可避免的(不完全正确...请参阅注释)

PouchDb基本上是Apache CouchDb的重新实现,包括它的高效同步协议.CouchDb和PouchDb都经过了良好的测试,免费和开源.开源意味着CouchDb服务器也可以部署为Intranet服务 - 可选择同步到外部云服务.有许多CouchDb托管服务提供商.

Cloudant托管团队最近将他们的BigCouch集群功能添加到Apache CouchDb 2.0项目,现在您可以从Micro Db(PouchDb)=>单服务器=>多主服务器(复制)=>大沙发集群/地理集群扩展.与MongoDb不同,CouchDb安全地支持单服务器部署.

注意:PouchDb也可以使用相同的协议同步到CouchBase但Couchbase!== CouchDb.这是一种商业产品.

链接:

CouchDb Hosters:

DIY

Docker + CouchDb:

卡车负载的插件

PouchDb有许多扩展点和增长列表插件(最后计数37个):

安全模型

迁移到CouchDb时需要考虑的一个问题是它具有更有限的访问控制模型.这部分是由于它的复制算法.这篇博文详细介绍了这一点(比真正的权威指南更好).


kil*_*joy 1

根据 Firebase 文档,它确实如此:https ://www.firebase.com/docs/web/guide/offline-capability.html

来自网站:Firebase 提供了一些简单的原语,允许在客户端与 Firebase 服务器断开连接时写入数据。无论客户端是否完全断开连接,这些更新都会发生,因此即使连接断开或客户端崩溃,我们也可以依靠它们来清理数据。所有 Firebase 写入操作(包括设置、更新和删除)都可以在断开连接时执行。

我是否错误地解释了这个问题?

我几乎删除了我的帖子,但是当我单击 OP 给出的链接时,我看到第三方包的功能与 Firebase 本身的功能完全相同,也许它是在 Firebase 改进同步之前完成的?

当我删除帖子时,我认为OP可能只想要一组选择性的数据,而不是“活动数据”,这是FB在本地存储直到连接恢复的内容

  • 该离线功能页面给我的印象是它在本地缓存数据。它不是。数据仅存在于 RAM 中,任何刷新或重新启动应用程序都会导致不存在任何数据。我相信onDisconnect会在服务器上存储一些javascript,以便在客户端消失时执行,显然当您离线时数据无法发送到服务器。Firebase 在这个问题上故意回避并使用双重说法,这给我留下了不好的印象。 (3认同)