2009-08-24 4 views
9

は、私がここにStackOverflowの上でSQLiteの性能に関する質問のカップルを見てきましたが、焦点はウェブサイト上にあった、と私は、クライアント - サーバのシナリオで、このDBを使用して検討している:SQLiteは

  • 今のところ1台のサーバーで1〜10台のクライアントが使用され、今後50台以上になる可能性があります。
  • もう少し
  • は、DBは(すなわち:ネットワーク経由で直接DBアクセスを使用していない)サーバプロセスの後ろに座る書き込みより読み込みのPostgreSQLを使用するのではなく、SQLiteのを使用して

でしょうがアプリはあまり反応します?私の直感は、これらの負荷では大丈夫だと言いますが、この種のシナリオでは実用的な経験があります。

+2

ウェブサイト*は*クライアントサーバーアプリ私はなぜこれが違うのか分かりません。何が違うと思いますか?なぜ、クライアントサーバーアプリケーションがWebサーバーアプリケーションと本質的に同じではないと言っていますか? –

+0

本質的には同じですが、SQLiteスケーラビリティに関する質問はStackoverflow担当者のカウンターでしたので、全く異なるアクセスパターンがあると思います。もう1つの重要な違いは、すべての技術スタックを厳重に管理できることですが、ブラウザではいくつかの選択肢が事前に決められています。 – rpg

+1

@rpg:はい、あなた自身のc/s設定をしている場合、ウェブサイトの設定のように全体をより詳細に制御できます。これは私の意見ではSQLiteの話です。ウェブサイトの設定でスケーラビリティがある場合、より多くの制御ができる設定にしてはいけないのはなぜですか?さらに、アクセスパターンはもちろん問題になることがあります。多くの書き込み(読み込みと混在)は、純粋な読み取り専用セットアップとしてDBエンジンに大きな負担をかけます。確かに!私はそれが1回の往復で変わるデータの量(行数、列数、テーブル数...)に依存すると言います。これらの書き込みを1つのトランザクションに入れることができますか...など – Juergen

答えて

13

私は10人の同時ユーザーで使用される主要なクライアント/サーバー製品にSQLiteを使用しましたが、はその決定を深くお悔やみします。私の意見では、PostgreSQLは、洗練されたロック細分性のために、SQLiteよりもクライアント/サーバのシナリオにはるかに適しています。

あなたは、単に非常に遠く、誰かが何かを書くために必要があるときに、データベース全体がロックされたときに取得することはできません。..

私はSQLiteのは非常に(私もSQLiteのデータベースを比較するための商業的有用性を書いた好き - SQLite Compareが、私を

でも、SQLiteの作者saysでも、完全なデータベースサーバではなく、カスタムファイルフォーマットの代わりに使うべきだと私は思っています。アドバイスをもっと真剣に..

+0

私の意見では、1つのDBファイルにアクセスする複数のサーバープロセスまたはクライアントがDBに直接アクセスします。 1つのサーバープロセスがあるとき - どのようにロックの問題を起こすことができますか(OK、スレッドを使用しないでください...)。 – Juergen

+1

実際には、複数のクライアントプロセスの名前でデータベースにアクセスする単一のサーバーがあります。だから何? 私の場合、すべてのクライアントはサーバー内のワーカースレッドによって表され、複数のクライアントがサーバー上で作業している場合は、データベースエンジンで同時に動作している複数のスレッドもあります。 データベースアクセスが実際にどのように実行されるかを事前に予測するのは非常に難しいです(つまり、読み取りと書き込みのアクセスパターン)。私は、最初からPostgreSQLの代わりにSQLiteを使用することを強くお勧めします。 –

+1

SQLite Compareユーティリティの新しいホームがありますか? – Flimzy

3

使用しているオペレーティングシステムとPostgresのバージョンについては言及していません。ただし、データベースエンジンの変更を検討する前に、通常の使用法で現在のデータベースをいくつかのロギングとベンチマークしてから、「重い」質問を最適化してみてください。そして、おそらくあなたのバックエンドの処理負荷は、DB質問時間が無関係になるでしょうか? SQLiteのファイルベースDBMSであるため、クライアントの数がアップ(コメント後に編集)成長したときに、複数のプロセスからの同時アクセスは、パフォーマンスが低下します

質問は役に立つかもしれ後:How Scalable is SQLite?

+0

パフォーマンスの低下は直接的な同時アクセスでのみ発生しますが、OPが述べたように、アクセスは間に1つのサーバープロセスで間接的に行われます...これにより少し減速したが、劣化はなかった。 – Juergen

+1

そうですね、複数のクライアントごとに1台のサーバーが見つかりませんでした。とにかく、DBの構築が非常にシンプルであれば、SQLite(DB側の処理、トリガーなど)に移行することができますが、DBが合理的に索引付けされていると、DBMSのパフォーマンスが重大な問題になるとは思われません。 – tomash

+0

まだコードは書かれていません。私はプロジェクトのリスクリストatmに取り組んでおり、スケーラビリティもその一つです。 Postgresを使用していませんが、OSはおそらくXP、Vista、それ以降はLinuxです。 – rpg

1

私はSに確認しますロットの答え。

新しいメジャーメントは知られていないので、SQLiteとPostgreSQLとの比較方法はわかりませんが、SQLiteの経験はかなり似ています。

私の見解で問題を引き起こす可能性があるのは、かなり多くの書き込みがあることだけです。しかし、それはすべて私が言いたい1秒あたりの総数に依存します。

私の意見では、サーバープロセスを1つ設定することがSQLiteにとって最適です。そのため、マルチタスクの弱点を回避できます。