我想给一个带有 PostgreSQL 数据库 100% 离线功能的网络应用程序。在理想情况下,数据库应该在每个用户的浏览器中完全复制,并在联机时同步。因此,可以使用相同的代码与离线和在线数据库进行通信。我知道 PouchDB 和 CouchDB 可以做到这一点,但还没有找到适用于 PostgreSQL 的解决方案。这是可能吗?
2 回答
简短的回答:我不知道目前存在这样的事情。
但是,从理论上讲,这可以使它起作用……(长答案:)
- 为levelup编写一个 PostgreSQL 后端(MySQL 存在一个后端:https://github.com/kesla/mysqldown)
- 使用 pouchdb 现有的 leveldb 适配器连接pouch-server以从您的 PostgreSQL 数据库读取/写入(这反过来必须配置为使用您的 postgres 后端)。恭喜,您现在可以使用 PouchDB 同步数据了!
像这样的方法对于您的应用程序在现实中是否实用是您必须回答的另一个问题。
例如,您可能想知道“我是否能够使用这种方法将具有多个表的现有复杂模式同步到客户端?” 答案可能不是——leveldown的mysqldown 实现使用具有三个字段的单个 MySQLid
表:目的适配器只是为您的应用程序!)。key
value
另一方面,如果您要在现有数据库模式上实现与 couchdb 兼容的 API(或子集 - 例如,您可能不需要附件),那么没有什么能阻止您在客户端上使用 PouchDB 直接与之对话就好像它是一个真正的 CouchDB - 只需弹出 URL 并调用replicate()
!实现复制协议可能是一项相当大的工作,因为您需要在某处跟踪修订等 - 但同样,技术上并非不可能!
还有一些专为浏览器设计的 levelup 后端存储的实现。请参阅level.js,这可能是服务器端 Postgres levelup 后端和浏览器之间同步的另一种方式。
TL;DR:现在围绕 Javascript 数据库做了大量的工作。与 Postgres 同步是不可能的吗?可能不是。工作量会很大吗?确实。值得?谁知道,但这会很酷。
没有在客户端安装 PostgreSQL?不。显然你可以缓存数据以供离线使用,但是整个 RDBMS+JavaScript 中的过程语言,不。