Node.js, транзакции в PostgreSQL, оптимизация c одновременного управления и повторных транзакций - PullRequest
4 голосов
/ 21 февраля 2020

Я хочу использовать PostgreSQL изоляцию транзакции , чтобы обеспечить правильность данных с шаблоном optimisti c управления параллелизмом , где конфликтующие транзакции автоматически повторяются, вместо того, чтобы мое приложение выполняло блокировку с прямым доступом строк и таблиц базы данных.

Один из обычных способов реализовать это состоит в том, что веб-приложение повторяет транзакцию определенное c количество раз в блоке кода или воспроизводит HTTP-запрос с помощью уровень промежуточного программного обеспечения, также известный как воспроизведение HTTP-запроса. Вот пример такого промежуточного программного обеспечения для веб-приложений Pyramid и Python web .

Я не нашел хорошей информации о том, как Node.js и его драйвер PostgreSQL обрабатывают ситуации, когда выполняются две параллельные транзакции, и одна не может go завершиться из-за конфликтов чтения и записи. PostgreSQL откатит одну из транзакций, но как это сигнализируется приложению? В Python, PSQL драйвер поднял бы psycopg2.extensions.TransactionRollbackError при этом условии. Для других SQL драйверов баз данных вот некоторые исключения, которые они будут вызывать .

Такое поведение более обычно, когда вы установили для уровня изоляции транзакции SQL значение SERIALIZABLE, как вы склонны получить больше конфликтов под нагрузкой, поэтому я хотел бы обработать это изящно, вместо того, чтобы давать пользователям HTTP 500.

У меня такой вопрос:

  • Как обнаружить грязные откаты чтения с PostgreSQL и некоторыми распространенными средами ORM, такими как TypeORM - если требуется специальная обработка и библиотека повторов не может быть независимой?

  • Есть ли промежуточное ПО (NestJS / Express. js / others), чтобы обработать это и автоматически попытаться воспроизвести HTTP-запрос N раз, когда происходит откат транзакции из драйвера базы данных?

...