0

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

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

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

4

1 回答 1

0

必须编写更多代码来检测是否出现了另一个更改,然后拒绝用户的编辑或尝试合并更改是很常见的。

例如,StackOverflow 就是这样做的。如果您正在编辑帖子并且其他人也在编辑它并首先保存他们的更改,那么当您提交编辑时会出现错误。然后你只需要重新加载新版本的帖子并重新开始。

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

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

于 2013-11-03T11:58:54.900 回答