以原子方式调用Web服务?

时间:2010-09-03 17:01:23

标签: php mysql database service

我有一个产品价格的MySQL数据库,从现在开始我想用这些值同步另一个数据库,但是这个其他数据库不在我的服务器中,我只能通过Web服务更新...

有没有办法让这两个操作(更新我的数据库并调用其他数据库的Web服务也更新)原子?有一天,当服务器试图调用Web服务来更新它时,我不想发现第二个数据库已关闭,因此,它与我当前的数据库没有相同的值。

顺便说一句,我正在使用PHP。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您对这些问题的回答可能有助于思考最佳解决方案 -

  • 价格更新是批量处理吗?我的意思是,在一周内或者某件事情中,您网站的所有价格都会被编辑,并且必须在另一台服务器(托管第二个数据库)上进行批量更改?
  • 或者是否可以编辑单个价格并且相同的更改必须同时生效或根本不生效(如果第二个服务器已关闭)?

  • 如果第二台服务器关闭,第一台服务器上的回滚更改,您想做什么?

如果网络服务回复 - 是否成功更新了产品价格,事情就变得非常简单了。这是让它看起来像原子的一种方法 -

  • 在表格中有两个字段 - price_backuplock_item,其中存储了所有商品价格。
  • 在开始更新过程之前,请设置lock_item = true,以便在此期间无法购买该项目(以防止不一致)。
  • 更新第一个数据库的价格字段,将价格保留在price_backup字段中,然后调用Web服务进行更新并检查响应。
  • 如果回复为false,请使用price_backup值恢复商品的价格并重置lock_item,否则只需重置锁定。

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