【问题标题】:How to sync CouchDB and PostgreSQL如何同步 CouchDB 和 PostgreSQL
【发布时间】:2017-02-04 00:24:34
【问题描述】:

我们有一个基于 RoR 的 web 应用程序,它使用 postgresql,现在我们必须与它集成移动应用程序,移动应用程序必须能够管理离线模式,因此我们需要在 web 应用程序和移动应用程序之间同步信息.

问题是,如果我有数据存储在postgresql上,我需要使用couchdb和pouchdb进行离线同步,我该怎么办??

谢谢!!

【问题讨论】:

  • 看看环回。它允许与包括 postgres 在内的许多数据库进行离线同步(不过它需要 nodejs)
  • @Kul 仅供参考,使用 loopback v4,他们没有计划建立离线同步。不过,他们对贡献它的社区持开放态度。
  • @PaulMest 是的,这很不幸。这是可以理解的,因为它不是微不足道的,每个人都想要一种不同类型的“离线支持”和不同的权衡。不过,对于来自外部的人来说,这是一个很好的机会

标签: ruby-on-rails ionic-framework couchdb pouchdb


【解决方案1】:

你能确保你只在 CouchDb 上写,而 PostgreSQL 只用于读取数据吗?在这种情况下,您可以使用 CouchDb 的 _changes 提要将所有数据复制回您的 PostgreSQL 数据库以进行只读访问。

【讨论】:

    【解决方案2】:

    与:https://github.com/pramsey/pgsql-http 您可以在表上使用触发器进行任何插入/更新/删除,并将它们转换为 http post 请求到沙发以及更新 postgres。 读了一半的https://github.com/sysadminmike/couch-to-postgres

    【讨论】:

      【解决方案3】:

      我还没有看到任何直接解决您的问题的方法,但是您可以从刚出炉的这项技术中获得一些想法。

      如果您想要移动在线/离线同步,您可以使用 GraphQL 复制协议而不是 CouchDB 复制协议。

      一个快速技巧是在 PostgreSQL 前面使用Hasura“即插即用”GraphQL 反应式后端,为其提供离线/在线 GraphQL 同步功能。在前端,您将需要 RxDB(它使用 PouchDB 作为存储引擎)或 Apollo JS(它是一个 GraphQL 客户端)。这些是 javascript 库,在移动世界中可能存在类似的东西。

      关于数据库架构,它可能不像想象的那样即插即用。您必须对要复制的表进行一些调整。根据 CAP 定理,PostgreSQL(作为 SQL 数据库)为您提供数据一致性和可用性(不可分区性)。然后 CouchDB/PouchDB 为您提供数据可用性和可分区性(最终一致性)。

      离线优先应用程序的数据库必须最终保持一致,并且能够处理版本冲突,因为当文档网/行在两个不同的地方同时更改时,可能会发生这种情况。

      所以要求是在 PostgreSQL 上实现最终一致性功能。这可以通过在每个离线优先准备表中创建一个名为 revision_id 的列来完成,使其成为表的主键的一部分,并使其成为包含先前 revision_id 列表的另一列。

      我自己从未尝试过,但这里是 tutorial 解释一切。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 2015-08-07
        • 1970-01-01
        相关资源
        最近更新 更多