【发布时间】:2018-11-01 10:53:24
【问题描述】:
我目前正在开发一个 nodeJS 应用程序,该应用程序很快需要同时在两个 PostgreSQL 数据库上进行编写。这是出于冗余目的:必须在两个数据库上同时进行写入操作,或者如果其中一个数据库出现任何问题,则回滚。
为了实现这一点,我需要依赖一个可以(或至少可以)在持久化过程中使用两阶段提交的事务管理器。
目前,应用程序使用开箱即用的解决方案来对当前数据库执行操作(即 pg-promise 包,目前它是应用程序的事务管理器)。
简而言之,我将需要同时在两个数据库上执行 Node 应用程序中的每个持久操作。
目前,我只使用 pg-promise 将数据持久保存在一个数据库中,如本例所示:
db.one(mySQLRequest)
但我发现一次只能为一个特定的数据库创建一个 db 对象。
我没有找到关于 NodeJS RESTful 应用程序存在如此巨大问题的示例,但我怀疑这可能是一个相当普遍的问题。如果不需要我自己重新编写整个事务管理器,我会很高兴...
如果您对我如何允许我的 NodeJS 应用程序执行两阶段提交有任何线索,我们将不胜感激。 :)
【问题讨论】:
-
“我必须在持久化过程中实现两阶段提交” 相反,外部事务管理器必须实现两阶段犯罪? (不确定 PostgreSQL 如何处理分布式事务。)无论如何,实现者不太可能是你。
-
two-phase commit听起来像是一个嵌套事务,pg-promise 支持得很好。你应该包含一个你正在尝试做的代码示例,并解释什么是行不通的。 -
@vitaly-t:在多个 PostgreSQL 数据库上同时写入这句话让我觉得更像是分布式事务,而不是嵌套事务。但你是对的——需要更多代码,或者至少需要更多细节。
-
我会尝试改进我的问题以使其更清晰。我想我的观点更多的是关于分布式事务,因为应用程序中的所有持久化操作必须同时在两个数据库上执行。
-
感谢您的回答。我试图改进我的问题,如果我仍然不清楚,请告诉我。
标签: node.js postgresql transactions commit pg-promise