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