Вызываете веб-сервис атомарным способом? - PullRequest
0 голосов
/ 03 сентября 2010

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

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

Кстати, я использую PHP.

Большое спасибо.

1 Ответ

1 голос
/ 03 сентября 2010

Ваши ответы на эти вопросы могут помочь подумать о лучшем решении -

  • Является ли обновление цены массовым процессом? Я имею в виду, что раз в неделю все цены на ваш сайт редактируются, а массовые изменения нужно делать на другом сервере (где размещена вторая база данных)?
  • Или это похоже на то, что отдельные цены могут быть отредактированы, и одно и то же изменение должно вступить в силу для обоих или вообще не действовать (в случае, если 2-й сервер не работал)?

  • Что бы вы хотели сделать, если бы 2-й сервер не работал, произошел откат на первом сервере?

Если веб-сервис ответит - успешно ли он обновил цены на свои продукты, все довольно просто. Вот один из способов сделать его атомарным -

  • Имеют два поля - price_backup и lock_item в таблице, где хранятся все цены на товары.
  • Перед запуском процесса обновления установите lock_item = true, чтобы элемент не мог быть приобретен в течение этого времени (во избежание несоответствий).
  • Обновите поле цены в первой базе данных, сохранив цену в поле price_backup, затем вызовите веб-службу для обновления и проверьте ответ.
  • Если ответ ложный, вернуть цену товара со значением price_backup и сбросить lock_item, либо просто сбросить блокировку.

Этот метод обеспечивает одинаковые значения на всех серверах. Тем не менее, могут быть лучшие методы

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