gpt4 book ai didi

php - 当我尝试有条件地插入或更新时,我在我的 Laravel 应用程序中遇到了竞争条件,有什么建议......?

转载 作者:行者123 更新时间:2023-11-30 22:20:31 26 4
gpt4 key购买 nike

我的用户需要能够将文件上传到我的站点,因此我在前端实现了一个文件 uploader 小部件。它允许一次上传多个,每次上传触发一次编码一个文件以将文件保存到数据库。

问题是文件需要作为数组存储在数据库中的一行中(我知道,我知道......遗留原因)。

用英文伪代码,这是发生了什么:

  1. Laravel 看到一个新文件已经上传
  2. Laravel 检查是否有任何文件(完全)被上传到该实体
  3. 还没有上传文件?创建一个新记录来存储该文件。
  4. 这个实体已经有文件了?更新现有记录以将此文件添加到数组中。

问题是,当多个文件第一次快速连续上传时,Laravel 在第二个文件之后将第一个文件输入数据库,检查是否任何文件已经存在。所以我们最终得到了重复的行,而不是将它们更新为单个记录。

如果我一次上传 5 个文件,通常我会在数据库中获得 4 行 - 3 个单项和 1 个双项,它们设法及时 catch 。

有什么实用的方法可以解决这个问题?我知道我应该在这里使用多对一的数据库模式,但为了简洁起见,我已经大大简化了本已复杂的情况!

这是使用 MySQL InnoDB 数据库的 Laravel 5.2。

最佳答案

方案A:当你看到一个新文件时,稍等片刻。然后查找“所有”文件并处理它们。

B 计划:在记录中存储时间戳。当注意到另一个文件时,查看是否存在带有“最近”时间戳的现有记录。如果是这样,则假设它属于同一个“组”。

这两个计划偶尔都会出现问题——主要是因为“立即”的定义模糊。

或许您目前遇到了另外一个问题:一个文件在抓取时上传了一半,得到的是一个不完整的文件?

“真正”的答案是在完成后上传一些“消息”。然后,在看到它之前不要开始处理。 (我意识到这可能不切实际。)

关于php - 当我尝试有条件地插入或更新时,我在我的 Laravel 应用程序中遇到了竞争条件,有什么建议......?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36725943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com