1

5時間ごとに再作成する一時データベーステーブルを作成する必要があるWebサイトがあります。アクションが完了するまでに約0.5秒かかります。

サイト分析では、約5ヒット/秒が示されています。この数字は徐々に増加する可能性があります。

質問

cronジョブはdbを空にし、それを再作成します。つまり、cronジョブでアクティブになっているときに、一時データベースに基づいてデータを入力するページにアクセスしているときに、データが見つからないか、不完全なデータを取得する可能性があるということですか?または、このシナリオはロックのためにMysqlによって処理されますか?

4

3 に答える 3

1

私のテストによると、あるMySQWLクライアントがデータベースを削除しようとしたときに、別のクライアントがそのテーブルの1つをロックしている場合、クライアントはテーブルのロックが解除されるまで待機します。

ただし、データベースを削除するクライアント自体も、データベースのテーブルをロックすることはできません。したがって、実行していることによっては、要求などをシリアル化するために他の方法を使用する必要がある場合があります。たとえば、ジョブでデータベースを削除して再作成し、テーブルを作成して他のクライアントが使用する前にそれらを設定する必要がある場合、ロックするテーブルが常に存在するとは限らないため、テーブルのロックが問題になります。

get_lock()「一時」データベースでの操作を調整するために、を使用して明示的なロックを使用することを検討してください。

また、戦略を再考することを検討してください。データベース全体を定期的に削除して再作成することは、一般的な方法ではありません。

于 2012-05-14T05:22:18.457 に答える
0

私が知っているように、テーブルをロックすると、ロックを解除しない限り他の人はそのテーブルにアクセスできませんが、他の接続は0.5秒後までしか待機しないため、テーブルを再作成するときにユーザーはさらに0.5秒待たなければならない場合があります。

データがないことを心配する必要はありません。少し遅れるだけです。

于 2012-05-14T04:54:15.353 に答える
0

ドロップして再作成する代わりに、最初に一時的な名前で作成し、古い名前を入力してからドロップし、新しい名前を変更することもできます。

さらに、テーブルがここにない小さな時間枠に対処するために、テーブルが見つからなかった場合にWebアプリを再試行できるようにするか、テーブルの名前を変更する代わりにビューを操作する必要があります。

于 2012-05-14T07:40:53.327 に答える