2

私は叔父の釣り店のために小さな店管理ソフトウェアを書いています。ローカル ネットワーク内の単一のデータベースにアクセスする複数のクライアントをサポートします。現在、データベースへのアクセスを同期する方法を探しています。1 つの解決策は、db アクセスを管理するサーバー プログラムを作成することです。しかし、私はネットワークプログラミングの経験がないので、他の解決策を見つけたいと思っています. 私は次のことを思いつきました:

データベース内のすべてのエントリには、最後に編集された時刻を知らせるタイムスタンプがあります。クライアントがエントリを編集する前に、タイムスタンプを読み取って、エントリが別のクライアントによって変更されているかどうかを確認します。その場合、クライアントはデータベースに書き込みませんが、ユーザーに通知します。ユーザーは、ローカルの変更を変更された db エントリとマージする必要があります。タイムスタンプの読み取り、タイムスタンプのチェック、およびデータベースへの書き込みのプロセスは、単一の jdbc トランザクションとして実装されます。

あなたはどう思いますか?

4

1 に答える 1

2

あなたのアプリケーションの場合、それはかなり小さいように見えるので (妥当な数のクライアント、低い同時実行性など)、トランザクション対応データベース (および、MySQL の InnoDB のようなエンジンですが、これは単なる例にすぎません) を使用して実行する必要があります。 SERIALIZABLE トランザクション分離で。その時点から、2 人の人が知らないうちに同じものを更新できないことが保証され、ベスト プラクティスに従うだけで済みます。

タイムスタンプを使用することは、一般に「楽観的」ロックと呼ばれるものです。基本的に読んで、何かが変更されないことを期待して書き込もうとします (WHERE 句のタイムスタンプまたはバージョン番号を含む)。これは一般的には良いことです (少なくとも、あなたの規模のアプリケーション、多くのクライアントを持つアプリの場合)。 、一部の状況では、高い並行性がこれに苦しむでしょう)

于 2011-11-23T16:30:37.653 に答える