двухфазная фиксация в приложении nodeJS - PullRequest
0 голосов
/ 22 мая 2018

В настоящее время я работаю над приложением nodeJS, которое вскоре должно будет выполнять одновременную запись в две базы данных PostgreSQL.Это предназначено для целей резервирования: операции записи должны выполняться одновременно в обеих базах данных или откатываться, если с одной из баз данных что-то не так.

Для достижениячто мне нужно положиться на менеджера транзакций, который (или, по крайней мере, мог бы) использовать двухфазное принятие в постоянном процессе .

В настоящее время приложение использует внеготовое решение для выполнения действий с текущей базой данных (т. е. пакет pg-prom , который пока выступает в качестве менеджера транзакций приложения).

Чтобы изложить все в двух словах,Мне нужно, чтобы каждое постоянное действие в приложении Node выполнялось одновременно для двух баз данных.

Сейчас я просто использую обещание pg для сохранения данных в одной базе данных, как в этом примере:

db.one(mySQLRequest)

но я нашел только создание объекта БД для одной конкретной базы данных за один раз.

Я не нашел примера для такой огромной проблемы наNodeJS RESTful приложение, но я подозреваю, что это может быть довольно распространенной проблемой.И я был бы рад, если бы не было необходимости самостоятельно кодировать весь менеджер транзакций ...

Если у вас есть какие-либо сведения о том, как я могу разрешить моему приложению NodeJS выполнять двухфазные коммиты, онобудет принята с благодарностью.:)

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Я искал и не нашел ни одного модуля node.js для управления распределенными транзакциями.

Если вы работаете по собственной инициативе, взгляните на транзакции XA, распределеннуюстандарт транзакций базы данных.Java имеет надежную и зрелую поддержку с помощью JTA (Java Transaction API), который помогает разработчику узла только в качестве источника вдохновения и справки.

postgresql имеет поддержку двухфазного принятия , поэтому строительные блоки существуют для любого из них.Поддержка XA или реализованная вручную реализация, специфичная для postgresql.

Я сам работаю над менеджером транзакций XA, но работа будет медленной с работой и детьми;сторонние проекты являются последними в очереди на время.Ищите ivolucien/coaction через год или два ...

0 голосов
/ 22 мая 2018

приложение nodeJS, которое вскоре должно будет выполнять одновременную запись в несколько баз данных PostgreSQL

Внутри pg-обещание каждый База данных содержит отдельный объектпул соединений с уникальным соединением.

Таким образом, при взаимодействии с несколькими базами данных вы просто создаете один объект База данных для каждой, и в этом сценарии также полезно использовать *Параметр 1013 *, который может быть любым.

Пример

const pgp = require('pg-promise')(/* initialization options */);

const db1 = pgp(connection1, dbContext1);
const db2 = pgp(connection2, dbContext2);
const db3 = pgp(connection3, dbContext3);

Мне нужно реализовать двухфазную фиксацию в постоянном процессе

Это должна быть пользовательская реализация, которая зависит от бизнес-логики вашего приложения.Библиотека не может вам в этом помочь, поскольку нет такой вещи, как транзакция между базами данных, вам придется реализовать ее самостоятельно.

Я даже думал о переписывании некоторых частей pg-обещаниясам модуль

Я не понимаю, что он может дать вам.Части, которые можно автоматизировать для транзакций, уже есть, а части для обеспечения целостности базы данных все на вашей стороне.

...