質問

最近この質問を読みました SQLite と MySQL の比較 その答えは、SQLite が適切に拡張できず、公式 Web サイトが指摘したものでした。 ある意味これを裏付ける, 、 しかし。

SQLite のスケーラビリティとその上限はどれくらいですか?

役に立ちましたか?

解決

昨日、小さなサイトをリリースしました* すべての訪問者に対して共有 SQLite データベースを使用した担当者を追跡します。残念ながら、ホストにかかる負荷がそれほど高くなかったとしても、動作は非常に遅くなりました。これは、更新/挿入が含まれているため、誰かがページを表示するたびにデータベース全体がロックされていたためです。私はすぐに MySQL に切り替えました。テストする時間はあまりありませんでしたが、SQLite よりもはるかに拡張性が高いように思えます。SQLite でシェルからクエリを実行しようとすると、ページの読み込みが遅くなり、時折データベース ロック エラーが発生したことを覚えています。とはいえ、私は SQLite から別のサイトを問題なく実行しています。違いは、サイトが静的であることです (つまり、データベースを変更できるのは私だけです)、したがって、同時読み取りでは問題なく機能します。この話の教訓:SQLite は、データベースの更新がめったに行われない (すべてのページが読み込まれるよりも少ない) Web サイトにのみ使用してください。

編集:SQLite に対して公平ではなかったかもしれないことに今気づきました。Web ページから SQLite データベースを提供するときに、SQLite データベース内の列のインデックスを作成しませんでした。これが部分的に私が経験していた速度低下の原因でした。ただし、データベースのロックについては注意が必要です。特に面倒な更新を行っている場合、SQLite のパフォーマンスは MySQL や Postgres に匹敵しません。

別の編集: 約 3 か月前にこれを投稿して以来、SQLite のスケーラビリティを詳しく調べる機会がありました。いくつかのコツを使えば、SQLite は非常にスケーラブルになります。最初の編集で述べたように、データベース インデックスによりクエリ時間が大幅に短縮されますが、これは SQLite に関するというよりも、データベースに関する一般的な観察です。ただし、SQLite を高速化するために使用できる別のトリックがあります。 トランザクション. 。複数のデータベース書き込みを行う必要がある場合は、それらをトランザクション内に置きます。書き込みクエリが発行されるたびにファイルに書き込む (およびロックする) のではなく、書き込みはトランザクションの完了時に 1 回だけ行われます。

最初の段落でリリースしたと述べたサイトは SQLite に戻りました。コードをいくつか調整したところ、非常にスムーズに動作するようになりました。

* サイトは利用できなくなりました

他のヒント

Sqlite はシングルユーザーの点でスケーラブルであり、私は非常に優れたパフォーマンスを発揮するマルチギガバイトのデータベースを持っていますが、特に問題はありませんでした。

しかし、それは シングルユーザーなので、どのような種類のスケーリングについて話しているのかによって異なります。

コメントへの返信。マルチユーザー環境での Sqlite データベースの使用を妨げるものは何もありませんが、すべてのトランザクション (事実上、データベースを変更するすべての SQL ステートメント) は、 ファイル, 、他のユーザーがデータベースにアクセスできなくなります。 まったく.

したがって、データベースに多くの変更を加えた場合、基本的にすぐにスケーリングの問題に遭遇することになります。一方、書き込みアクセスに比べて読み取りアクセスが多い場合は、それほど悪くない可能性があります。

しかし、Sqlite はもちろん 関数 マルチユーザー環境では可能ですが、そうではありません 実行する 良い。

SQLite は、sqlite.org Web サイトやその他のトラフィックの多い Web サイトを推進します。彼らは、もしあなたが持っているなら、 100k未満 1 日あたりのヒット数であれば、SQLite は正常に動作するはずです。そして、これは「Writeahead Logging」機能が提供される前に書かれたものです。

SQLite を使用して処理を高速化したい場合は、次の手順を実行します。

  • SQLite 3.7.x にアップグレードする
  • 有効にする 先行書き込みロギング
  • 次のプラグマを実行します。「Pragma cache_size = of-pages;」デフォルトのサイズ(ページ数)は2000ページですが、その数を上げると、メモリからまっすぐに実行されているデータの量が増加します。

YouTube にある私のビデオ「」をご覧ください。先書きログによる SQLite のパフォーマンスの向上これは、先行書き込みログの使用方法を示し、書き込み速度が 5 倍向上することを示しています。

スクライトとは、 デスクトップ または 仕掛品 データベース。SQL Server、MySQL、Oracle、およびそれらの兄弟は次のとおりです。 サーバー.

デスクトップ データベースはその性質上、次の用途には適していません。 どれでも データ ストアへの同時書き込みアクセスをサポートする必要があるアプリケーション。これには、これまでに作成されたほとんどの Web サイトがある程度含まれます。何かのためにログインする必要がある場合は、おそらく DB への書き込みアクセスが必要です。

この SQLite ドキュメントを読みましたか? http://www.sqlite.org/whentouse.html ?

SQLiteは通常、低〜中程度のトラフィックWebサイト(つまり、すべてのWebサイトの99.9%)のデータベースエンジンとしてうまく機能します。SQLiteが処理できるWebトラフィックの量は、もちろん、Webサイトがデータベースをどれだけ大きく使用しているかに依存します。一般的に言えば、1日/日に1万人未満のサイトを取得するサイトは、SQLiteで正常に動作するはずです。100Kヒット/日の数字は保守的な推定であり、ハード上限ではありません。SQLiteは、その10倍のトラフィックで動作することが実証されています。

SQLite のスケーラビリティは、使用されるデータとその形式に大きく依存します。私は非常に長いテーブル (GPS レコード、1 秒あたり 1 レコード) で厳しい経験をしました。経験上、SQLite は段階的に速度が低下することがわかっています。その理由の 1 つは、インデックスを保持する成長するバイナリ ツリーの定期的な再バランスが原因です (タイムスタンプ付きインデックスを使用すると、 知る このツリーは今後大幅に再調整される予定ですが、検索には不可欠です)。したがって、私の場合、最終的に約 1 GB (かなり大まかですが) になると、クエリが遅くなります。走行距離は異なります。

覚えておいていただきたいのは、これだけ自慢しているにもかかわらず、SQLite はデータ ウェアハウス用に作られたものではないということです。色々な用途があります 推奨されません SQLite用。SQLite の背後にある優秀な人々は自らこう言っています。

SQLite を調べる別の方法は次のとおりです。SQLite は Oracle に代わるものとして設計されたものではありません。fopen() を置き換えるように設計されています。

そして、これが主な議論 (定量的ではなく、申し訳ありませんが、定性的) につながります。SQLite はあらゆる用途に適しているわけではないのに対し、MySQL は、たとえ理想的ではないにせよ、多くの多様な用途に対応できるということです。たとえば、MySQL に (SQLite の代わりに) Firefox Cookie を保存させることもできますが、そのサービスを常に実行する必要があります。一方、トランザクション Web サイトを MySQL の代わりに SQLite (多くの人がそうしているように) で実行することもできますが、多くのダウンタイムが発生することが予想されます。

数百のクライアントにサービスを提供する (数字で 1) ウェブサーバーが、データベースへの 1 つの接続でバックエンドに表示されると思います。

したがって、データベースには同時アクセスがないため、データベースは「シングル ユーザー モード」で動作していると言えます。このような状況でマルチユーザー アクセスについて議論するのは無意味であるため、SQLite は他のサーバーベースのデータベースと同様に機能します。

このように考えてください。SQL Lite は、誰かが使用するたびにロックされます (SQLite は読み取り時にロックしません)。したがって、複数の同時ユーザーが存在する Web ページまたはアプリケーションを提供する場合、SQLLite では一度に 1 人だけがアプリケーションを使用できます。つまり、スケーリングの問題があります。数百のタイトル、評価、情報、使用状況、再生、再生時間を保持する音楽ライブラリなどの 1 人用アプリケーションの場合、SQL Lite は数百万とは言わないまでも数千のレコードを保持するように美しく拡張されます (ハード ドライブが必要な場合)。

一方、MySQL は、世界中の人々が同時に使用するサーバー アプリケーションに適しています。ロックはなく、かなり大きいです。したがって、音楽ライブラリの場合、何千人ものユーザーが追加または更新する共有音楽ライブラリでない限り、MySql は 1 人しか表示されないため、使いすぎになります。その場合、MYSQL を使用することになります。

したがって、理論的には、MySQL は複数のユーザーを処理できるため、Sqllite よりも拡張性が優れていますが、単一ユーザーのアプリには過剰です。

SQLite の Web サイト (参照した部分) は、SQLite がさまざまなマルチユーザー状況に使用できることを示しています。

かなり対応できると言えます。私の経験では、常に非常に高速でした。もちろん、テーブルにインデックスを付ける必要があり、テーブルに対してコーディングするときは、パラメータ化されたクエリなどを必ず使用する必要があります。基本的には、パフォーマンスを向上させるためにデータベースで行うことと同じことです。

チェックしてみる価値があるかもしれません 本物の SQL サーバー, 、SQLite 上に構築されたデータベース サーバーです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top