2011-10-17 7 views
0

記事のベースhttp://www.codeproject.com/KB/cs/SQLiteCSharp.aspxSQLiteはクライアントサーバーアプリケーションには適していませんか?

すべてのデータベースと同様に、SQLiteには欠点のリストがあります。クライアントサーバーアプリケーションやネットワークデータベースとしては適していません。マルチユーザーのシナリオではうまくいかず、ネットワーク経由で同時にアクセスすると重大なファイルロックの問題が発生する可能性があります。同様の理由から、SQLiteはマルチスレッドまたはマルチプロセスのアプリケーション/データベースアクセスシナリオには適していません。

SQLiteがクライアントサーバーアプリケーションに適していないことは本当ですか?私は書店とカラオケのアプリケーションを開発したいからですか? SQLiteが適切でない場合、自己完結型、サーバレス、ゼロ設定のどのデータベースに適していますか?

+3

軽負荷でしか動作しない場合、SQLiteはクライアント/サーバ設定で正常に動作するはずです。 ( "サーバ"はアプリケーションのバックエンドであると仮定して、SQLiteへの単一の接続を開き、そのアクセスを適切に同期させます)。 – millimoose

+0

[SQLite for client-server](http://stackoverflow.com/questions/1321493)/sqlite-for-client-server) – MPelletier

答えて

2

スレッドが1つしか実行されておらず、アプリケーションがすべての要求を処理するのに十分速い場合は、問題ありません。あなたが指摘したように、複数のスレッド、または複数の同時ユーザー書き込み(通常は複数のスレッド経由)が、問題にぶつかる場所です。

私の答えはthis questionで、SQLiteですでに示唆していたデータベースロックなどの問題のいくつかを詳しく説明しています。

+0

SQLiteでは、複数のスレッド間で複数の読み取りが可能ですが、複数の書き込みはできません。 –

+0

はい、技術的な修正をありがとうございます。私はそれを '複数同時ユーザアクセス'から '複数同時ユーザ書き込み'に変更しました。これは当初意図したものです。 – jefflunt

2

SQLite FAQは言う:

は(5)複数のアプリケーションまたは同一アプリケーションの複数のインスタンスが同時に1つのデータベースファイルにアクセスすることはできますか? 複数のプロセスで同じデータベースを同時に開くことができます。複数のプロセスが同時にSELECTを実行することができます。しかし、随時、1つのプロセスだけがデータベースに変更を加えることができます。

リンクの下に詳しい情報があります。

あなたが本当に行う必要があることは、書き込みのために何らかの種類のロック機構を使用していることを確認することだけです。

+0

正しい。 SQLiteには独自のロック機構があり、DBite中にSQLite :: Busyエラーが返され、適切に反応させることができます(例えば、後でやり直したり、書き込みをキャンセルするなど) – jefflunt

+0

SQLiteには独自のロックが含まれていますメカニズムでは、同時書き込みは許可されません。 SQLiteのドキュメントによると、問題は、SQLiteの基礎となるファイルロックメカニズムを実装する際に、さまざまなネットワークファイルシステムが信頼できないということです。 –

関連する問題