2016-11-08 4 views
0

私はしばらくの間、PHPアプリケーションを開発しています。 (基本的な)考え方は次の通りです。ユーザーはブロックを使用してWebページを構築できます。これらのブロックには、イメージ、テキストなどを含めることができます。これらのブロックのそれぞれには、独自のオプションがあります。これらのブロックは、PHPによるドメイン駆動型設計で定義されています。PHP:最善の方法を前方に[シリアル化、オブジェクト、Redis]

私は、jQuery/Javascriptフロントからのリクエストを処理するPHPベースのコントローラを使用するようにアプリケーションを構築しました。ユーザがオプションを編集するたびに、このコントローラに送信され、Redisおよび/またはphp-sessionからブロックのコレクション(php-objects)をシリアル化し、編集または追加/削除するブロックの属性を設定します。ブロック。これは、ドメインロジックを強化するためです。

私は自分自身のために発展するだろうが、それはうまくいた。私は決して競争条件などを心に留めていませんでした。製品を進めていくうちに、人々はデータを失うことに気付きました。私は何が起こるか説明します。

  1. ユーザーは要求が
  2. コレクションをunserialisesと
  3. が自分のUUID
  4. に基づいてブロックを設定し、コントローラに行われる
  5. 保存ブロックのオプション
  6. プレスを編集ブロックをコレクションに戻し、
  7. はコレクションを再度シリアライズします。

2つの同時リクエストが作成され、両方のリクエストのうち1つの編集を上書きするシナリオがあります。

私はアプリケーションのこの部分を書き直す必要があることを知っています。問題は最良のアプローチは何か。私はできた;

  1. アプリケーションの全体を書き直す必要があるため、多くの作業が必要になるjavascriptライブラリを実装します。また、私はjavascriptベースのソリューションを実装する経験がたくさんありません。しかし、私は新しいものに足を踏み入れることはできません。私はjavascriptによるテストを行い、今後の問題の発生を防ぎ、クロスブラウザテストを有効にしたいと考えています。
  2. コントローラが単一のリクエストを処理し、同時リクエストが前のリクエストのデータセットを上書きしないようにするには、これにより、同時要求およびデータ損失の可能性は低くなりますが、完全には低下しません。本当に遅いインターネット接続を持つ人は、同時に多くの同時リクエストを生成する可能性がある場合、接続が失われる可能性があります。

私が逃している可能性がある他のアプローチや、上記の2つのうちのいずれかで十分でしょうか。

+0

多くの良い質問は、専門家の経験に基づいてある程度の意見を生成しますが、この質問に対する回答は、事実、参考文献、または特定の専門知識ではなく、概ね意見に基づいている傾向があります。一般的な問題を解決するための開発フォーラム(おそらく[quora](http://www.quora.com/Computer-Programming)?)を探したいかもしれません。次に、特定のコーディング上の問題がある場合は、StackOverflowに戻ってください。お手伝いします。 –

答えて

1

私があなたの問題を理解している限り、実装したいことはoptimistic lockingです。

これを実装する簡単な方法は、集約をバージョン化することです。

誰かがあなたのオブジェクトを編集するたびに、バージョンを増やします。

編集したブロックPOSTを変更すると、変更を適用しようとしているバージョンが返されます。

オブジェクトを永続ストレージから戻すときに、バージョンを比較して、実際に最新のオブジェクトで作業していることを確認します。

変更されていない場合は保存し、変更を拒否し、ユーザーに通知してオブジェクトを再ロードし、適切な処置を講じます(必要に応じて)。

+0

ボリス、ご意見ありがとうございました。ご返信ありがとうございました。私はこれをできるだけ早く調べます!これは簡単な修正/回避策になります。最高のこのハンドラ、そのブロックと全体のメカニズムのjavascriptのバージョンを構築することです。 –

関連する問題