web-dev-qa-db-ja.com

同じデータセットの複数のユーザーのためのテクニック

これはコーディングよりも学習の質問ですが、php/mysql/jsなどで管理システムやアプリケーションを開発している人にはよくある問題だと確信しています。

私は、ユーザーが画像をアップロードし、関連するアクションを使用して画像内のホットスポットを定義できる、非常に複雑なアプリケーションを開発しました。画像はテーブルに保存され、アクションは別のテーブルに保存され、すべてのアクションのjsonデータがテキストフィールドに表示されます。しかし、私が言うように、問題は一般的です。

基本的に、誰かが同じ画像と一連のアクションを同時に編集していて、両方が変更を送信した場合、または他の誰かが編集した場合、送信に失敗する可能性のある一連の構造が存在するのではないかと心配しています。

ロックシステムは非常に広範囲(他の画像へのリンクなど)であるため、実装したくありません。少し醜いと思います。別の質問で このリンク (MSDNマルチテナントアーキテクチャの記事)を見ましたが、少し圧倒され、SQLサーバーに特化しているようです。

それで、ここで私が調査できるデータとシステムアーキテクチャの用語は何ですか、または人々が推奨できるこのトピックに関連するいくつかの良い記事がありますか?特にphp/webの世界は素晴らしいでしょう!

4
dmp

多くの場合、「最後のライターが勝つ」という単純な手法で十分です。

最後のライターが勝ちます最後に保存した人が変更を保持していることを意味します。その人が編集している間に行われた変更はすべて失われます。

これはおかしなアプローチのように思えるかもしれませんが、多くのシステムでは、変化の原因は現実の世界と同期することであると考えてください。

顧客の住所と電話番号を一覧表示するシステムについて考えてみます。顧客の1人であるメアリーが最近引っ越しをしたとします。彼女はあなたのコンパンドに住所変更カードを送りました。彼女の夫であるジョンはこれについて知らなかったので、カスタマーセンターを通じて詳細を更新するために電話をかけました。偶然にも、アドレスカードの変更は電話と同時に処理されています。

どの変更を保持する必要がありますか?どちらの編集でも家の住所が同じ値に変更されるため、問題ではありません。

また、同時更新の潜在的な頻度にも留意する必要があります。実際には、電話と住所カードの変更の処理が同時に行われる可能性はほとんどありません。カードが最初に処理された場合、ジョンは電話をかけたときに詳細がすでに正しいことに気付くでしょう。カードが最後に処理された場合、オペレーターは詳細がすでに正しいことを確認します。どちらの場合も、競合はありません。

2
Bevan