我希望将一个使用PostgreSQL数据库的Web应用程序实现100%离线功能。理想情况下,每个用户在浏览器中应完全复制该数据库,并在联机时进行同步。这样,同一代码可以用于与离线和在线数据库通信。我知道这可以通过PouchDB和CouchDB实现,但尚未找到适用于PostgreSQL的解决方案。这是否可能?
我希望将一个使用PostgreSQL数据库的Web应用程序实现100%离线功能。理想情况下,每个用户在浏览器中应完全复制该数据库,并在联机时进行同步。这样,同一代码可以用于与离线和在线数据库通信。我知道这可以通过PouchDB和CouchDB实现,但尚未找到适用于PostgreSQL的解决方案。这是否可能?
简短回答:目前我不知道类似的东西是否存在。
然而,从理论上讲,这是可行的...(长篇回答:)
对于您的应用程序来说,像这样的方法是否实际可行是您必须回答的另一个问题。
您可能会想知道,例如,“我能够使用这种方法将具有多个表的复杂现有模式同步到客户端吗?” 答案可能是否定的 - leveldown 的 mysqldown 实现使用一个带有三个字段的单个 MySQL 表:id
、key
和 value
(来源),我想任何通用的 PostgreSQL 适配器都会类似(不过,你可以为你的应用程序制作一个特殊目的的适配器!)。
另一方面,如果您实现了一个与 couchdb 兼容的 API(或其子集-例如,您可能不需要附件),并在现有的数据库模式上使用它,那么就没有什么阻止您使用 PouchDB 在客户端直接与该 API 进行通信,就像它是一个真正的 CouchDB 一样-只需插入 URL 并调用 replicate()
即可!实现复制协议可能需要相当多的工作,因为您需要在某个地方跟踪修订版等 - 但从技术上讲不是不可能的!
目前有一些适用于浏览器的levelup后端存储的实现。请参阅level.js,这可能是在服务器端Postgres levelup后端和浏览器之间同步的另一种方式。
简而言之: 当前正在围绕JavaScript数据库进行大量工作。与Postgres同步是否不可能?可能不是。这将需要大量工作吗?肯定是。值得吗?谁知道,但这很酷。
不安装PostgreSQL在客户端上怎么可能呢?显然你可以将数据缓存以供离线使用,但是在Javascript中使用完整的关系型数据库管理系统和过程式语言,是不可能的。