本番サーバー上のSQLite?[閉まっている]


9

私はSQLiteについて長い間知っていて、非常に高速であることを知っていますが、実稼働サーバーで試したことはありません。失敗するまでに処理できるトラフィックの量について、確実な見積もりを見つけることはできませんでした。

誰かがこれについて何か番号や記事を持っていますか?


2
警告:質問と回答の一部には誤解、誤解、古い情報が含まれています!
Chris S

私たちはSQLiteを本番環境
Uri Agassi

回答:


4

残念ながら、ロード機能に関する数値はわかりませんが、パフォーマンスを制限する要素のいくつかについてコメントします。

  • SQLiteの速度は、ディスクの速度と、挿入/更新が大量に行われているかどうか(書き込みアクセスなど)に影響されます。書き込みロックはディスクの回転速度によって制限されます

  • トランザクションはデフォルトで開始されますが、トランザクション開始してコミットすると、パフォーマンスが向上します。プログラムでトランザクションを処理するときに、非常に高速な大量挿入を行った

  • 通常、データを読み取るだけの場合、私の経験では優れたパフォーマンスが得られます。したがって、SQLiteは、データベースサーバーの読み取り、特にリモートの読み取りや複雑なクエリを格納するためのキャッシュシステムとして使用できます。

  • データベースサーバーよりも使用するリソースが少ないため、Webサーバーとアプリケーションコード用により多くのリソースを解放するため、サイトのパフォーマンスに影響を与える可能性があります。

  • 複数の同時書き込みを可能にする必要がある場合は、データベースサーバー(MySQL、Postgresなど)が適切に機能する可能性があります。

以下のようDevrimは述べ、100Kのユーザー/日の周りにSQLiteのサイトの状態は問題ないはずです。Tracシステムは書き込みを必要とするため、その場合はおそらくパフォーマンスが低下します。


responesをありがとう、基本的に一度にデータベースに書き込むことができるのは1つだけですか?しかし、ロックされていなくても、複数の人にデータベースから読み取ってもらうことはできますか?もしそうなら、私はキャッシングシステムのいくつかのアイデアを得ました。
Hydralisk博士、2010

投げられた「100K」の数字は役に立たない。ドキュメントは、「一般的に言えば、1日あたりのヒット数が10万未満のサイトはSQLiteで正常に動作するはずです。」と書いています。「ヒット」は通常、HTTPリクエストとして定義されます。これには、ヒットのすべての.js、.css、および画像のリクエストが含まれます。これはDBのパフォーマンスとどのような関係がありますか?著者が「ページビュー」を意味すると仮定しても、それはまだ役に立たない。ページビューあたりのクエリ数は?読み取りと書き込みの比率?DBはどのようなハードウェアで実行されていますか?仕事に他に優れたツールが12個以上ある場合は、WebサイトにSQLiteを使用することはお勧めできません。
jamieb

@Dr Hydraliskはい、読み取りは並行して発生する可能性があります。ファイルと同じように
Cez

@jamieb「ヒット」についてのポイントは公正なものです。どのハードウェアまたはサーバーリソースが利用可能であるかについては誰も言及していません。そのため、私たちが知っているすべてのことについて、それは小さな仮想サーバーになる可能性があります。特にデータベースサーバーがリモートサーバーである場合、SQLiteデータベースをキャッシュシステム、または主に読み取り専用のテーブルに含めると、パフォーマンス上の利点得られます。データベースクエリのメモリキャッシュ+ SQLiteキャッシュは、データベースクエリだけのパンツを打ち負かします。
Cez

3

これらの良い答えに追加するいくつかのポイントがあります。

SQLiteの現在のバージョンにはWAL(Write-Ahead Logging)があり、読み取りと書き込みを同時に行うことができます。したがって、以前の回答で述べた従来の単一のライターの制限はなくなりました。WALはまだ実稼働環境で見たことがないので、WALがどれほど拡張性があるかはコメントできません。

WALを使用するかどうかにかかわらず、SQLiteデータベースが読み取り専用(またはバッチ更新)であり、RAMに収まる場合(OSがバッファーに保持するのに十分な予備のRAMをOSに備えている場合)、本番環境のWebアプリケーションで非常に適切にスケーリングできます。個人的には、そのパフォーマンス、スケーラビリティ、堅牢性について非常に懐疑的でしたが、今では9か月の運用でシステムの最も複雑な部分でも非常にうまく動作することが証明されています。


1

Sqliteはアプリケーションに埋め込むのに最適であり、それがそのために設計されたものですが、確かに「非常に高速」ではありません。私は自分のいくつかのアプリケーションにそれを使用していますが、完全に機能するアプリケーションを提供するために別のマシンにコピーできるファイルが2つしかないという便宜のためだけです。同じ構造、インデックスなどを使用したMySQLに対するテストでは、小規模なデータベースの場合でも、Sqliteがかなり遅くなることが示されています。100 MB未満のデータベースでしか使用していないため、データベースのサイズが大きくなるにつれてパフォーマンスの差が大きくなることを期待します。


PRAGMAは、パフォーマンスを向上させるために調整できますが、データベースがときどき破損する可能性があります(ただし、データは失われません)。私の経験では、SQLiteに古いWindowsXPマシン上で約250〜300rpsで挿入させることができました。
djangofan 2011

-1同意しないため。私はサイズが数GBのSQLiteデータベースを構築してクエリを実行しましたが、たとえば同じタイプのハードウェアでMySQLを使用すると、毎秒同じ量のクエリを取得できませんでした。SQLiteは、正しくマッサージする方法を知っていれば、毎秒120kの書き込みクエリを簡単に実行できます。
Alix Axel

0

sqliteはtext / xmlファイルよりも高速だと思います(試してみると驚くかもしれません)。また、ユーザーが勤務時間を登録したり、トラックチケットを使用したりするイントラネット用のサイトを作成したい場合、同時実行性はサポートされていません。それ以外は、回避してmysqlまたはcouchdbに置き換える必要があります。

sqliteのWebサイトでは、1日あたり10万人のユーザーが問題ないと言っていますが、単純なtracプロジェクトが10 pplのオフィスでの使用でかなり行き詰まっているので、私はそれを疑っています。


0

Sqliteは、従来のクライアント/サーバーDBアプリケーションではありません。それは本質的に、別のアプリケーション内に埋め込まれたライブラリです。シングルユーザーデスクトップアプリケーション向けに設計されています。DB全体が書き込み時にロックされているため、マルチユーザー環境で何らかのスタンドアロンMySQL / PostgreSQL / MS-SQLの代替として使用することは絶対に望まないでしょう。パフォーマンスを破壊する軽負荷でも競合の問題に対処します。


WALでは、同時書き込みのみがブロックされます。さらに、デフォルトのMySQLエンジン(MyISAM)は、書き込みクエリがある場合は常にテーブル全体をロックします。
Alix Axel

1
@AlixAxelこの回答は、WALが利用可能になる6か月前に書かれました。
jamieb 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.