php - 通过合并到 MySQL 中保存不断更新的数据数组(可能存在并发问题)

标签 php mysql updates

目前我们有一个 PHP 基础,用户可以在其中登录他们的帐户。我们的网站非常大,我们的开发人员希望有一种方法来存储任意数量的数据以使每个用户受益(因此这可能是他们在页面上输入的内容,我们可以根据他们在何时执行此操作的事实来加载具有不同值的页面他们回去了)。

问题是我不确定存储这些持久数据的最佳方法。我最初的想法是将其存储在 MySQL 数据库中的序列化 PHP 数组中。这工作得很好,只是我们遇到了一个并发问题,即用户打开一个页面,该页面拉出数组,决定需要修改它,然后执行此操作,同时,他们在另一个选项卡中打开一个页面,其中包含拉出数组的相同原始副本,确定它需要不同的修改,并将其写入数据库,因此只有一页“获胜”,而更改丢失。用户很有可能(目前确实发生了)在不同的选项卡中打开我们网站的多个页面,因此我们确实需要考虑到这一点。

第二个解决方案只是第一个解决方案的扩展,我们可以在 MySQL 中存储更新时间的时间戳,如果开发人员拉取后整个数组已更新,他们将需要重新拉取整个数组,检查它们的更改仍然相关并重新提交,以便它将成为新数组。这看起来有点困惑,但这是我目前最好的解决方案,有人有其他想法吗?

最佳答案

通常需要编写更多代码来检测是否出现了其他更改,然后拒绝用户的编辑或尝试合并更改。

例如,StackOverflow 就是这么做的。如果您正在编辑帖子,而其他人也在编辑该帖子并先保存了更改,那么当您提交编辑时,您会收到错误消息。然后您只需重新加载帖子的新版本并重新开始。

可能有多种方法可以合并更改,但这非常棘手。如果两个编辑的合并导致一组互斥的属性或其他没有意义的属性怎么办?

处理非原子更改(读取当前数据,然后必须使用 PHP 等语言在两个单独的请求中处理发布更改)的另一种方法是在编辑正在进行时将记录标记为锁定。但这还有其他并发问题。

关于php - 通过合并到 MySQL 中保存不断更新的数据数组(可能存在并发问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19752189/

相关文章:

php - 如何从 php 中的 popen 打开的进程中获取输出?

mysql - RDBMS - 无法弄清楚将该表放置在哪里

ElasticSearch中的Mysql等价物,根据字段更新字段

php - 读取查询的多个结果并将其显示到 php 生成的表中

linux - Nodejs 更新将旧版本保留为当前版本

php - 在 mysql 列中选择包含字符串的行

PHP + MySQL 创建一个表单来更改 MySQL 表中的数据

php - 如何在日期列上添加 MySQL 中的天数?

android - A/B 软件更新系统镜像大小

typescript - 移相器 3 : Update Sprite object from canvas texture