HTTP-запросы в транзакциях? - PullRequest
0 голосов
/ 26 марта 2012

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

В настоящее время я делаю это в before_create обратном вызове. Недавно я узнал, что до / после обратных вызовов происходит в транзакциях базы данных .

Открываю ли я себя такими проблемами, как ограничение пропускной способности БД, делая это? Было бы лучше зафиксировать запись перед отправкой http-запроса, а затем обновить запись, когда она вернется?

1 Ответ

1 голос
/ 26 марта 2012

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

Другими словами: не помещайте ничего в ту же транзакцию.

Если вы не возражаете против появления новой строки перед поиском дополнительной информации, вы можете просто зафиксироватьи позже обновите строку.

Или вы извлекаете информацию из внешнего веб-сервиса еще до того, как начнете транзакцию.Это было бы самое чистое / быстрое решение для базы данных.

Типы блокировок PostgreSQL .
Как просматривать блокировки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...