2010-09-03 46 views
0

我有一个MySQL数据库产品的价格,从现在开始,我想与这些值同步另一个数据库,但这个其他数据库不在我的服务器上,我只能通过web服务更新它...以原子方式调用Web服务?

有没有办法让这两个操作(更新我的数据库和调用Web服务的其他数据库更新)原子?我不想知道某一天,当服务器尝试调用Web服务来更新它时,第二个数据库已关闭,因此它不具有与当前数据库相同的值。顺便说一下,我使用的是PHP。

非常感谢。

回答

1

你这些问题的答案可以帮助思考的最佳解决方案 -

  • 是价格更新用本体法?我的意思是一周之内或者某个网站的所有价格都被编辑了,并且批量更改必须在其他服务器上进行(第二个数据库托管在哪里)?
  • 或者是像个别价格可以编辑和相同的变化对任取两个效应或没有(如果第2个服务器关闭)?

  • 你想做些什么的情况下做第二个服务器坏了,回滚第一台服务器上的变化?

如果Web服务提供回应 - 无论是否成功更新其产品价格,事情都非常简单。这里是使其显得原子的一种方式 -

  • 有两个领域 - price_backup并在所有项目的价格都存储在表lock_item
  • 开始于更新处理之前,设置lock_item = true,使得项目不能在该时间期间(以防止inconsistensies)购买。
  • 更新第一个数据库中的价格字段,将价格保留在price_backup字段中,然后调用Web服务来更新并检查响应。
  • 如果响应是假的,恢复该项目的价格与价值price_backup和复位lock_item,或者干脆复位锁定。

该方法确保跨服务器相同的值。但是,可能会有更好的方法