2009-06-10 15 views
0

私のWebアプリケーションを使用すると、ユーザーは複数の写真を同時にサーバーにアップロードし、データベースに保存することができます。最初の写真のアップロードが終了すると、今日の日付に基づいてデフォルトのアルバムを作成し、それに追加する必要があります。しかし、もしphoto1が完了し、アルバムを探してそれを見つけることができないようにするなら、それができる前に、photo2が完了してもそれを見つけることができないので、両方とも同じアルバムを作り、 1つは失敗する原因になりますか?これはおそらく非常に起こりそうにないかもしれませんが、私は考えることができます。あるいは、ほとんどのWebサーバーは一度に1つのPHPスクリプトしか処理しませんか?データベースでの同時アップロードの処理

これは有効かつ効果的な解決策でしょうか?写真1が最初に存在するかどうかを調べるのではなく、ただ作成しようとしています。エラー1062(重複エントリ)が返された場合は、それを選択します。あなたがそれについて考えるなら、どちらが最初に終わるかは重要ではありません...私はちょうどエラーをキャッチすることが大きなパフォーマンスヒットとして来るかどうかわかりません。 200枚の写真をアップロードしている場合、そのうちの199枚が挿入クエリに失敗し、次に選択を試みます。他のソリューションが正しく動作する場合、199は成功し、1つは欠落します。

思考?

+0

どのMySQLバージョンをお使いですか?あなたのテーブルはどのようなエンジンを使用していますか? InnoDB? MyISAM? – raspi

+0

@raspi:vesion 5.1.30、テーブルはMyISAMです。私はそれが実際に何を意味しているか決して分かったことはありません。 – mpen

答えて

1

が存在する場合、両方の

チェックを結合し、それがない場合は作成しないのはなぜそのdoesntの仕事は再び

+0

私はあまりにも実際にそれについて考えていた。 1行または2行の余分なコードを意味しますが、99%の時間は決して実行されません。私はこれが論理的だと思う:p – mpen

1

写真ではありませんが、同様のことがありますが、すべてのアイテムが処理されるまで待つだけです。これは、最初にステージング領域に保持することを意味しますが、もう1つの問題を解決します。

+0

おっと...私はこの解決策が嫌いです:)それは悪いことではありませんが、私はすぐに写真で他のものをやりたいと思います。 +1私の説明を与えられた潜在的に有効な解決策のため – mpen

1

を全部を起動する場合は、1つ

を作成しようとしていない場合

に参加アルバムが最初に表示され、内容がある場合にのみ表示されますか?

だからあなたのスクリプトロジックのようなものになります。彼らは、アルバムを作成し、それを使用しない場合は、その方法

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

を、それが表示されません。あなたは、1日またはそれ以後、すべての空のアルバムを整理するためのメンテナンススクリプトを作成することができます。

1

これは、トランザクションの処理と同期についてのすべてです。ご使用の言語(PHP)がトランザクションの処理と同期を提供していない場合は、データベース自体を使用してこれを処理できます。

私はあなたがすでにこれを持っていると思います - それぞれのリクエストは、アルバムを作成しようとしていることを確認する必要があります。それが失敗した場合、他のプロセス/要求がすでに作成しているかどうかを調べて、それを使用することができます。

関連する問題