处理数据库上的同步上载

时间:2009-06-10 16:48:59

标签: php mysql mysql-error-1062

我的网络应用程序允许用户同时将一堆照片上传到服务器,然后将它们存储在数据库中。第一张照片完成上传后,应根据今天的日期创建默认相册,并将其添加到该相册中。但是,如果photo1完成,找不到它,所以它决定创建它,但在它可以之前,photo2完成并且也找不到它,所以然后它们都试图创建相同的专辑,导致一个失败?这可能是非常不可能的,但我认为可能会发生。或者大多数Web服务器一次只处理一个PHP脚本?

这是一个有效且好的解决方案吗?:而不是photo1检查专辑是否存在,它只是尝试创建它。如果它返回错误1062(重复输入),那么它选择它。如果你考虑一下,那么首先完成哪一项并不重要......我只是不知道捕获错误是否会成为一个重大的性能影响。如果我上传200张照片,那么其中199张将无法插入查询,然后尝试选择。如果其他解决方案正常工作,199将成功,一个将错过。

思想?

4 个答案:

答案 0 :(得分:1)

我们有类似的东西,虽然与照片没有关系,但我们只是等待所有项目在处理之前发送。这意味着首先将它们保存在临时区域,但要解决另一个问题。

答案 1 :(得分:1)

结合两者

检查它是否存在以及是否加入

如果不尝试创建一个

如果那不起作用再次开始整个事情

答案 2 :(得分:1)

为什么不首先创建相册,只有在有内容的情况下才显示它?

所以你的脚本逻辑看起来像:

create album<date>
while more images
    upload next image
    add to album<date>
voila

这样,如果他们制作专辑并且不使用它,它就永远不会显示。您可以使用维护脚本来清理所有空白相册,或者不久之后。

答案 3 :(得分:1)

这就是事务处理和同步的全部内容。如果您的语言(PHP)不提供事务处理和同步,那么您可以使用数据库本身为您处理此事。

我认为你已经有了这个 - 每个请求应该检查以确保它尝试创建相册成功。如果失败,它可以查看是否已经创建了其他进程/请求,然后使用它。