現在、マルチユーザー環境で SQLite を使用してデータベースをロックするという問題が発生しています。これらは、データベース ロックの例外の数を減らすためにジャーナリングがオフになっているという事実により、通常のデータベースの不正な問題と結びついています。
私の同僚は現在、同期アルゴリズムを実装して、ユーザーがローカルの SQLite データベースで作業し、そのデータをネットワーク上のマスター データベースにほぼ瞬時に転送できるようにしています。
ローカル行が変更されると、Sync フラグが true に設定されます。同期アルゴリズムは、毎秒実行されるタイマーによってトリガーされ、アップロードとダウンロードの 2 つの方法で構成されます。以下で説明する SQL コマンドはすべて、String.Format を使用して構築されています。
アップロード中に、ローカル データベースがスキャンされ、Sync フラグが true である行が検出されます。このような各行は、マスター データベースに更新または挿入されます (同じ PK を持つ行が見つかるかどうかによって異なります)。
ダウンロード中に、すべてのローカル テーブルが、行ごと、フィールドごとに、マスター データベース内の対応するテーブルと比較されます (比較を高速化するために、両方のテーブルが配列構造としてメモリに読み込まれます)。違いが見つかった場合、またはローカル行が欠落している場合、マスター データベースのデータを使用してローカル行が更新/挿入されます。
これでロックや奇形の問題が解決しないという明らかな事実を無視すると、私の直感では、これはひどい考えだとわかりますが、権力者にこれを説明するのに苦労しています。なぜこれがひどいアイデアなのか、あるいは私が見落としていたいくつかのポジティブな点について、誰かが何らかの理由を提供できますか.