如何在PostgreSQL数据库的Web应用程序中拥有完整的离线功能?

Bli*_*lix 20 postgresql offline pouchdb

我想给一个带有PostgreSQL数据库100%离线功能的Web应用程序.在理想情况下,数据库应该在每个用户的浏览器中完全复制,并在联机时进行同步.因此,可以使用相同的代码与脱机和在线数据库进行通信.我知道PouchDB和CouchDB可以实现这一点,但是还没有找到适用于PostgreSQL的解决方案.这是可能吗?

jch*_*hes 12

简短的回答:我不知道目前存在的任何类似的东西.

然而,从理论上讲,这可以使... ...(长答案:)

  1. levelup编写PostgreSQL后端(MySQL存在一个:https://github.com/kesla/mysqldown)
  2. 使用pouchdb现有的leveldb适配器连接pouch-server以从PostgreSQL数据库读取/写入(后者必须配置为使用postgres后端).恭喜,您现在可以使用PouchDB同步数据了!

对于您的应用而言,这样的方法是否切实可行是您必须回答的另一个问题.

例如,您可能想知道"我能用这种方法将现有的复杂模式与多个表同步到客户端吗?" 答案可能不是 - leveldown的mysqldown实现使用一个包含三个字段的MySQL表:id,keyvalue(source),我想任何通用的PostgreSQL适配器都是类似的(没有什么说你不能做一个特殊的 -适用于您的应用程序的目的适配器!).

另一方面,如果您要在现有数据库模式上实现与couchdb兼容的API(或子集 - 您可能不需要附件),那么就没有什么能阻止您在客户端上使用PouchDB直接与之交谈好像它是一个真正的CouchDB - 只需弹出URL并调用replicate()!实现复制协议可能是一项相当大的工作,因为您需要在某个地方跟踪修订等 - 但同样,技术上并非不可能!

还有levelup后端存储的实现,专为浏览器而设计.请参阅level.js,这可能是在服务器端Postgres levelup后端和浏览器之间进行同步的另一种方法.


TL; DR:现在有很多关于Javascript数据库的工作.与Postgres同步是不可能的?可能不是.这会是很多工作吗?当然.值得?谁知道,但它会很酷.