私はドキュメントサーバーを実装しています。現在、2人のユーザーが同じ文書を開き、変更して変更を保存すると、文書の状態は未定義になります(最初のユーザーの変更は永久に保存されるか、2番目のユーザーの変更です)。これは完全に満足のいくものではありません。私はこの問題を解決するために、2つの可能性を検討し:最初はそれが誰かによって初めて開かれた文書をロックし、それが閉じているときに、ロックを解除することですドキュメントサーバー:同時保存の処理
。しかし、サーバーへのネットワーク接続が突然中断された場合、文書は永久にロックされた状態にとどまります。明らかな解決策は、サーバーに定期的なpingを送信することです。サーバーが特定のクライアントからK行(K> 1)のK個のpingを受信しない場合、このクライアントによってロックされたドキュメントはロック解除されます。そのクライアントが再度表示された場合、文書がまだロックされていなければ、文書は再びロックされます。これは、クライアントアプリケーション(Webブラウザで実行中)が予期せず終了し、「終了して、自分のドキュメントのロックを解除する」信号をサーバーに送信できなくなる場合にも役立ちます。
第二は、異なるユーザによって保存された同じ文書の複数のバージョンを格納することです。文書への変更が連続して行われる場合、システムはバージョンをマージするか、または優先バージョンを選択するかのいずれかを提供する。ストレージスペースを最適化するには、ソース管理ソフトウェアと同様に、ドキュメント差分のみを保存する必要があります。
サーバーへの接続が(時には)が遅く応答しないことを考慮して、どのような方法を選択する必要がありますか?どのようにパラメータ(ping間隔、急速な連続間隔)を決定する必要がありますか?
P.S.残念ながら、私はデータベースにドキュメントを保存することはできません。