2011-10-10 3 views
5

バックエンドとしてSQLiteと共にSQLAlchemyを使用するPylonsアプリケーションがあります。私はSQLiteに行くすべての読み取り操作が常にハードディスク読み取り(RAMに比べて非常に遅い)につながるか、またはいくつかのキャッシュメカニズムが既に関与しているかどうかを知りたいと思います。SQLiteは常にディスクにヒットしますか?

  • SQLiteは高速アクセスのためにRAMにデータベースのサブセットを保持していますか?
  • OS(Linux)で自動的に実行できますか?
  • SQLiteの代わりに本番データベース(MySQLまたはPostgreSQL)を使用すると、どれくらいのスピードアップが期待できますか?

答えて

3
  1. はい、SQLiteには独自のメモリキャッシュがあります。たとえば、PRAGMA cache_sizeをチェックしてください。また、スピードアップをお探しなら、PRAGMA temp_storeをチェックしてください。独自のキャッシュを実装するためのAPIもあります。

  2. SQLiteデータベースは、単なるOSファイルです。それに対して「自動的に」行われるものはありません。キャッシングが確実に行われるようにするには、sqlite.h定義とランタイムプラグマ設定があります。

  3. それは、あなたが減速する代わりに、多くの場合があります。私が代わりにsqliteのの本番データベース(MySQLやPostgresの)を使用することによって期待できるどのくらいのスピードアップ

+1

#2では、sqliteが実際にOSにディスクキャッシュを使用しないように指示していますか? –

+0

@Mechanicals他のファイルでは実行しないSQLiteデータベースの場合、OSは自動的に何もしません。 – hamstergene

+0

しかし、キャッシュされていない読み取り(および書き込み)されますか? –

0

実稼働サーバー環境でsqliteを使用していますか?あなたは、おそらくすべきではない:

Appropriate Uses for Sqliteから:

SQLiteのは、通常のウェブサイトへのデータベースバックエンドとして正常に動作します。 ウェブサイトが忙しく、 データベースコンポーネントを別のマシンに分割することを考えている場合、 は、SQLiteの代わりにエンタープライズクラスのクライアント/サーバーデータベース エンジンを使用することを検討してください。

SQLiteはのためによく設計されていない、とうまくスケールすることを意図していませんでした。 SQLiteはパフォーマンスの利便性をトレードします。パフォーマンスが懸念される場合、別のDBMSを検討する必要があります

+6

リンク先のページには、SQLite *が1日あたり100Kから1000Kヒット(または、ウェブサイトの99.9%)の実稼働環境でうまく機能することが示されています。実際のデータベースサーバーを提案するWebサーバーとは別のサーバーにデータベースを移動するときだけです。 –

関連する問題