首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库同步

数据库同步
EN

Stack Overflow用户
提问于 2011-06-27 21:40:46
回答 1查看 81关注 0票数 0

我在我正在开发的系统中有一些问题。我有一个python脚本,它首先与虚拟化软件一起工作,如果该操作成功,它会将内容写入数据库。如果在虚拟化软件中发生了一些异常,那么我可以管理所有的东西,但是如果插入数据库失败,真正的问题就会发生。如果插入失败,我将不得不还原虚拟化软件中内容,否则将变得异步。但问题是,恢复该软件中的内容并不总是可能的。

如何处理才能使数据库与该软件保持同步?是否有中间件或特殊应用程序?或者在编程中有什么逻辑?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-27 22:10:25

您需要在系统中执行两个操作(在virt中执行OP: operation。软件;WDB:写入数据库)是原子的(两个都发生,或者都不发生)。一种分布式事务,但您的虚拟化软件不直接支持可处理的行为(无回滚)。如果你能让它们成为某个分布式事务系统的一部分,你就完成了(参见eg),但这通常是不可能的或不切实际的。实现伪事务行为的不同策略取决于您的场景的具体情况。下面是一些例子:

  1. 打开TX (数据库中的事务)
  2. WDB TX操作成功,提交TX,否则回滚TX。

只有当您写入DB的内容不依赖于OP操作时才是可行的(不太可能)。

  1. OP1 (操作的第一阶段:您将获得结果,但不要更改virt.sofware)
  2. Commit TX或rollback

(步骤4-5可以切换)这将是一个糟糕的“两阶段提交”实现。只有当你能将你的操作分成这两个阶段时才是可行的。

  1. 打开TX
  2. 虚拟WDB (将虚拟结果写入数据库)
  3. 回滚WDB

这将检查DB是否可操作,在尝试实际操作和写入之前执行一次虚拟写入。可行,但不是万无一失。

  1. OP
  2. WDB
  3. If失败:将数据保存到原始文件、记录错误、向IT发送邮件、打开红灯。

听起来很可悲。但有时这是唯一可行的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6493758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档