Синхронизация базы данных - PullRequest
0 голосов
/ 27 июня 2011

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

Как обращаться с вещами, чтобы я мог синхронизировать базу данных с этим программным обеспечением? Любая промежуточная посуда или специальное приложение ??? Или какая-то логика в программировании?

1 Ответ

1 голос
/ 27 июня 2011

Вы хотите, чтобы два действия в вашей системе (OP: работа в вашем виртуальном программном обеспечении; WDB: запись в базу данных) были атомарными (либо выполнялись, либо не выполнялись).Вид распределенной транзакции, но ваше виртуализированное программное обеспечение напрямую не поддерживает поведение с возможностью транзакций (без отката).Если бы вы могли сделать их частью какой-либо распределенной транзакционной системы, вам бы этого хотелось (см. , например, ), но это часто невозможно или нецелесообразно.Различные стратегии для достижения псевдотранзакционного поведения зависят от особенностей вашего сценария.Некоторые примеры:


  1. Открыть TX (транзакция в БД)
  2. WDB
  3. OP
  4. Если операция выполнена успешно, передайте TX, иначеоткат TX.

Возможно только в том случае, если то, что вы записываете в БД, не зависит от операции OP (маловероятно).


  1. OP1 (первая фаза операции:вы получаете результаты, но ничего не меняете)
  2. Open TX
  3. WDB
  4. OP2 (вторая фаза: вы изменяете виртуальную программу)
  5. Фиксация TX или откат

(шаги 4-5 можно переключать). Это будет реализация "Двухфазного принятия" для бедного человека.Это возможно, только если вы можете разделить свою деятельность на эти две фазы.


  1. Открыть TX
  2. Пустой WDB (записать фиктивный результат в БД)
  3. Откат TX
  4. OP
  5. WDB

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


  1. OP
  2. WDB
  3. В случае неудачи: сохранить данные в необработанный файл, зарегистрировать ошибку, отправить письмо в ИТ,включите красные огни.

Звучит жалко ... но иногда это единственный возможный способ.

...