2

WindowsデスクトップベースのJavaアプリケーションでSQLite(Xerial JDBCドライバー)を使用しています。次に、複数の Java ベースの Swing クライアントが、指定されたサーバー Windows PC 上の同じ SQLite db ファイルに接続する、同じアプリケーションのクライアント サーバー バージョンに進みます。私が間違っている場合は修正してください:

  1. このモードで SQLite を使用する唯一のオプションは、SQLite データベース ファイルをネットワーク共有上に保持することですか? または、私が見逃している他の解決策がありますか?
  2. SQLite を使用すると、DB が破損する可能性が高くなりますか?

多くの同時更新操作は見られません。同じ DB の読み取りと更新を試みる 5 ~ 10 のクライアントが存在します。その場合、エンタープライズ級のDB(MySQL、Postgres)を使った方が良いのでしょうか?

4

2 に答える 2

3

引用されたものの前のFAQの段落から:

SQLite は、リーダー/ライター ロックを使用してデータベースへのアクセスを制御します。(リーダー/ライター ロックをサポートしていない Win95/98/ME では、代わりに確率的シミュレーションが使用されます。) ただし、注意してください: データベース ファイルが NFS ファイルシステムに保持されている場合、このロック メカニズムは正しく機能しない可能性があります。これは、多くの NFS 実装で fcntl() ファイルのロックが壊れているためです。複数のプロセスが同時にファイルにアクセスしようとする可能性がある場合は、SQLite データベース ファイルを NFS に置くことは避けてください。Windows では、Microsoft のドキュメントによると、Share.exe デーモンを実行していない場合、FAT ファイルシステムではロックが機能しない可能性があります。Windows の経験が豊富な人は、ネットワーク ファイルのファイル ロックは非常にバグが多く、信頼できないと言っています。彼らの言うことが本当なら、

私は SQLite データベース ファイルをネットワークで共有するつもりはありません。データの破損を再現するのが困難な厄介な同期の問題を自分自身で買っているように見えるからです。

別の言い方をすれば、一般的なファイル共有メカニズムを使用して、別の DBMS のサーバー機能を代用しているということです。これらの他の DBMS は、複数のクライアント アクセスに対して特別にテストされ、現場で強化されていますが、SQLite には大きなメリットがありますが、これはその 1 つではありません。

于 2011-08-21T11:58:03.450 に答える
0

これはよくある質問です:

[...] SQLite ほど多くの同時実行性をサポートする組み込み SQL データベース エンジンは他にありません。SQLite では、複数のプロセスでデータベース ファイルを一度に開いたり、複数のプロセスでデータベースを一度に読み取ったりすることができます。プロセスが書き込みを行う場合、更新中はデータベース ファイル全体をロックする必要があります。しかし、通常は数ミリ秒しかかかりません。他のプロセスは、ライターが完了するのを待ってから、処理を続行します。他の組み込み SQL データベース エンジンでは、通常、データベースに一度に接続できるプロセスは 1 つだけです。[...]

SQLite is serverlessもお読みください。

SQLite がニーズに十分かどうかはわかりません。実行時間の長い更新トランザクションがある場合、データベース全体をロックすると深刻な問題になる可能性があります。JDBC を使用してアクセスしているため、必要に応じて別のデータベース エンジンに切り替える際に問題が生じることはほとんどありません。

于 2011-08-21T11:45:22.393 に答える