【问题标题】:Architecture Challenge with 2 databases2 个数据库的架构挑战
【发布时间】:2020-11-26 18:43:46
【问题描述】:

如何为单个 rest 应用处理两个数据库。我看到这是一个云应用程序概念,但如果在 DB1 而不是 DB2 中删除了某些内容,如何处理并确保两者始终相同。

【问题讨论】:

    标签: database architecture


    【解决方案1】:

    有很多方法可以做到这一点。

    首先您需要考虑数据库是否具有相同的架构和数据。在这种情况下,主从,主从复制将解决它。

    如果架构和数据在某些表中相似而在其他表中不相似,在这种情况下,您可以使用 dblink 仅复制一个表Postgresql: master-slave replication of 1 table

    大多数情况下,此类更改是在应用程序级别进行的,如果您真的想避免处理 2 阶段提交,您可以有一个队列和一个服务处理(重试和恢复)两个 dbs 的更新

    最后在需要支持直接更新 db(不通过应用程序)的情况下,触发器和 dblink 是一个机会。

    请探索这些工具以获得更多想法:https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling

    编辑:如果您有幸拥有相同的 db/data https://www.2ndquadrant.com/en/resources/postgres-bdr-2ndquadrant/,请从这里开始

    【讨论】:

    • 在不使用复制或其他技术时有没有办法避免冲突?在没有负载平衡器的休息服务中?因此,在 t1 可以访问 db1,而在 t2 可以访问 db2。我敢肯定,如果没有任何复制 2 阶段提交,该设计几乎是有缺陷的并且容易损坏。团队中的一个人告诉我,拥有一个通知条目已被删除的 rest-endpoint 将满足条件。
    • 您能否详细说明您的具体案例?它是什么类型的应用程序?
    • 我只想说一些 CRUD 应用程序。
    • 对于一个 crud 应用程序,有一种方法,但它是 f*ck 的核心。检查en.wikipedia.org/wiki/Conflict-free_replicated_data_type 你也可以检查冲突解决技术作为对象的锁定(ala CVS),或自动喜欢(保留最后的更改)等。你仍然需要经常比较数据
    • 你也可以做一些像默克尔树这样的事情,只发送变化的差异......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2011-05-15
    • 2023-03-17
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    相关资源
    最近更新 更多