0

Web アプリ (サーバー側で Django を使用) があり、ユーザーの 1 人 (管理者のようなユーザー"A" ) が特定のビュー (Web ページ) を読み込めるようにして、データベース テーブルを変更できるとします。ユーザーAが終了するまで(ページ上の特定のボタンを押すまで)、他のユーザーがデータベース(およびデータベースの変更に関連するビュー)にアクセスできないようにします。私はMySQLとSQLite(開発用)を使用しています。これが私の質問です。

  1. テーブルをロックする MySQL メカニズムは、Web サーバー レベルではなく、MySQL サーバー レベルで機能します。アプリケーション サーバー (Django) 側には、MySQL サーバーに関連付けられた MySQL ユーザーが 1 つしかないため (つまり、すべてのアプリ ユーザーが MySQL 側で同じユーザーを持つことになります)、そのメカニズムはここでは関係ありません。私は正しいですか?

  2. 1. 上記が正しい場合、そのようなロックを作成する正しい方法は何ですか? まあ、単一のブールエントリを持つ別のテーブル「lock_table」を作成でき、すべてのビューがそれをポーリングし、設定されている場合は「一時的にロックされたデータベース」ビューにリダイレクトします。しかし、それが良い方法かどうかはわかりません。ご存知の方、実装方法を教えてください。

ありがとう。

4

2 に答える 2

1
  1. あなたは正しいです。すべてのデータベース クエリは同じ MySQL ユーザーによって行われるため、テーブルをロックするために MySQL レベルでシステムを設定することはできません。

  2. 正しい方法は、memcached または別のキャッシュ システムを使用してキャッシュにロックを設定し、そのようなロックがそれらのビューのデコレータに存在するかどうかを確認することです。

于 2014-04-20T17:10:38.277 に答える
1

選択肢 2 は良い賭けです。別のオプションは、django データベースで「仮想の 2 番目のデータベース」を定義し、このデータベースを使用してロック クエリを実行することです。詳細はこちらをご覧ください。

于 2014-04-20T17:51:14.407 に答える