如何在WordPress中确保数据一致性

时间:2018-01-08 作者:Roberto Rodes

我目前正在用Wordpress实现一个web应用程序。

然而,现在,我面临着一个我认为对每个试图用Wordpress实现wep应用程序的人来说都是一个普遍的问题。尽管如此,似乎没有人谈论它。

这个问题与数据一致性有关。在查看了关于该主题的不同来源并使用Wordpress代码玩了很长时间之后,我没有看到数据库ACID事务或任何其他确保数据一致性的方法的痕迹。考虑到一个用户请求可能会触发数据库上的多个写操作,这样一个关键问题似乎可能会导致数据不一致,因为在处理请求的过程中可能会出现故障,导致部分写操作。

这似乎在Wordpress API函数内部也会发生。

以wp\\u insert\\u post(一种常见的核心API操作)为例。这个函数似乎执行多个写操作,它们不会在数据库事务的范围内执行。在我看来,这是正确的,因为在我看来,事务生命周期应该在更高的应用程序层进行管理。

但是,即使在更高的层中,也不会使用任何事务。

更糟糕的是,我发现wp\\u insert\\u post隐藏了它在数据库上执行的大多数写调用的返回值(例如将缩略图保存为元数据、类别、标记等)。

这一事实可能会让调用者(如其他第三方插件或wordpress管理页面本身)认为所有内容都已正确保存到数据库中,而事实并非如此,从而阻止他们注意到这一点,因此他们无法正确处理事务(知道何时提交或回滚)或向用户提供适当的反馈。

我错过什么了吗?如何使数据最终在Wordpress应用程序中保持一致?

一般来说,我们如何确保使用Wordpress开发web应用程序不会导致噩梦,即试图管理此类数据不一致?

在此方面的任何帮助都将不胜感激。

1 个回复
SO网友:kaiser

不,你没有遗漏什么。但您对您的用例使用了错误的“框架”(WordPress不是)。你把事情搞混了。你所说的A.C.I.D.交易绝不是你所认为的。

ACID:保存崩溃恢复(由于软件或硬件故障)

  • 锁定:对行和其他部分的独占写入都可以通过使用WordPress支持的数据库来完成……使用正确的引擎:

    MySQL:InnoDB查看InnoDB Locking 了解更多详细信息。

    另一种方法是使用硬盘锁(写入LOCK 文件到磁盘)或者,如果您在同一请求中,则使用软件锁(您切换到的变量或常量TRUE/FALSE). 第三个选项是在数据库中本机设置锁。

    更多信息in this answer 在这里的网站上。

  • 结束

    相关推荐

    Database Name Change

    我读到,使用wp\\uu之外的其他东西作为数据库前缀更安全,所以我下载了我的数据库前缀wp\\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu