0

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

これは有効で適切な解決策でしょうか?: photo1 は最初にアルバムが存在するかどうかを確認する代わりに、アルバムを作成しようとします。エラー 1062 (エントリの重複) が返された場合は、そのエントリが選択されます。考えてみれば、どちらが先に終わるかは問題ではありません...エラーをキャッチすることがパフォーマンスに大きな影響を与えるかどうかはわかりません。200 枚の写真をアップロードすると、そのうちの 199 枚が挿入クエリに失敗し、選択を試みます。他のソリューションが正しく機能する場合、199 は成功し、1 つが失敗します。

考え?

4

4 に答える 4

1

最初にアルバムを作成し、コンテンツがある場合にのみ表示してみませんか?

したがって、スクリプト ロジックは次のようになります。

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

そうすれば、アルバムを作成して使用しない場合、アルバムは表示されません。メンテナンス スクリプトを使用して、すべての空のアルバムを 1 日または後でクリーンアップすることができます。

于 2009-09-27T07:34:47.063 に答える
1

両方を組み合わせる

存在するかどうか、および参加しているかどうかを確認します

そうでない場合は作成してみてください

それがうまくいかない場合は、すべてをやり直してください

于 2009-06-10T16:54:03.270 に答える
1

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

すでにこれを取得していると思います。各リクエストは、アルバムの作成が成功したかどうかを確認する必要があります。失敗した場合は、他のプロセス/リクエストによって既に作成されているかどうかを確認し、それを使用できます。

于 2009-09-27T07:44:52.153 に答える
1

写真とは関係ありませんが、似たようなものがありますが、すべてのアイテムが送信されるのを待ってから処理します。これは、最初にそれらをステージング領域に保持することを意味しますが、他の問題は解決します.

于 2009-06-10T16:52:41.820 に答える