如何在具有PostgreSQL数据库的Web应用程序中实现完全的离线功能?

27

我希望将一个使用PostgreSQL数据库的Web应用程序实现100%离线功能。理想情况下,每个用户在浏览器中应完全复制该数据库,并在联机时进行同步。这样,同一代码可以用于与离线和在线数据库通信。我知道这可以通过PouchDB和CouchDB实现,但尚未找到适用于PostgreSQL的解决方案。这是否可能?


一个 Web 应用程序真的是满足那些需求的正确选择吗? - BillRobertson42
2个回答

19

简短回答:目前我不知道类似的东西是否存在。

然而,从理论上讲,这是可行的...(长篇回答:)

  1. levelup 编写一个 PostgreSQL 后端(已经有一个用于 MySQL 的:https://github.com/kesla/mysqldown
  2. 使用 pouchdb 的现有 leveldb 适配器(该适配器将配置为使用您的 postgres 后端)将 pouch-server 连接到您的 PostgreSQL 数据库进行读写。祝贺你,现在可以使用 PouchDB 同步数据了!

对于您的应用程序来说,像这样的方法是否实际可行是您必须回答的另一个问题。

您可能会想知道,例如,“我能够使用这种方法将具有多个表的复杂现有模式同步到客户端吗?” 答案可能是否定的 - leveldown 的 mysqldown 实现使用一个带有三个字段的单个 MySQL 表:idkeyvalue (来源),我想任何通用的 PostgreSQL 适配器都会类似(不过,你可以为你的应用程序制作一个特殊目的的适配器!)。

另一方面,如果您实现了一个与 couchdb 兼容的 API(或其子集-例如,您可能不需要附件),并在现有的数据库模式上使用它,那么就没有什么阻止您使用 PouchDB 在客户端直接与该 API 进行通信,就像它是一个真正的 CouchDB 一样-只需插入 URL 并调用 replicate() 即可!实现复制协议可能需要相当多的工作,因为您需要在某个地方跟踪修订版等 - 但从技术上讲不是不可能的!

目前有一些适用于浏览器的levelup后端存储的实现。请参阅level.js,这可能是在服务器端Postgres levelup后端和浏览器之间同步的另一种方式。


简而言之: 当前正在围绕JavaScript数据库进行大量工作。与Postgres同步是否不可能?可能不是。这将需要大量工作吗?肯定是。值得吗?谁知道,但这很酷。


-4

不安装PostgreSQL在客户端上怎么可能呢?显然你可以将数据缓存以供离线使用,但是在Javascript中使用完整的关系型数据库管理系统和过程式语言,是不可能的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接