私は最近、SQLiteとMySQLに関するこの質問を読みましたが、SQLiteは適切にスケーリングされておらず、公式Webサイトがこれをある程度確認していると回答が指摘しました。
SQLiteのスケーラビリティとその上限はどのくらいですか?
私は最近、SQLiteとMySQLに関するこの質問を読みましたが、SQLiteは適切にスケーリングされておらず、公式Webサイトがこれをある程度確認していると回答が指摘しました。
SQLiteのスケーラビリティとその上限はどのくらいですか?
回答:
昨日小さなサイトを公開しました*すべての訪問者の共有SQLiteデータベースを使用した担当者を追跡します。残念ながら、それが私のホストにかける適度な負荷があっても、それは非常にゆっくりと実行されました。これは、更新/挿入が含まれているため、ページが表示されるたびにデータベース全体がロックされていたためです。私はすぐにMySQLに切り替えましたが、テストする時間はあまりありませんでしたが、SQLiteよりはるかにスケーラブルなようです。SQLiteでシェルからクエリを実行しようとすると、ページの読み込みが遅く、データベースがロックされることがあるというエラーが発生することを覚えています。そうは言っても、私はSQLiteの別のサイトを問題なく実行しています。違いは、サイトは静的であり(つまり、データベースを変更できるのは私だけ)、そのため、同時読み取りでは問題なく機能します。この話の教訓:
編集:私はSQLiteに不公平だった可能性があることに気づきました-Webページからサービスを提供しているときにSQLiteデータベースの列にインデックスを付けませんでした。これが部分的に私が経験していた減速を引き起こしました。ただし、データベースロッキングスタンドの観察-特に面倒な更新がある場合、SQLiteのパフォーマンスはMySQLまたはPostgresと一致しません。
別の編集:これを約3か月前に投稿して以来、SQLiteのスケーラビリティを綿密に調査する機会があり、いくつかのトリックで非常にスケーラブルになりました。最初の編集で述べたように、データベースインデックスはクエリ時間を劇的に削減しますが、これはSQLiteよりもデータベースに関する一般的な観察の多くです。ただし、SQLiteを高速化するために使用できるもう1つのトリックとして、トランザクションがあります。複数のデータベース書き込みを行う必要がある場合は、トランザクション内に書き込みます。書き込みクエリが発行されるたびにファイルに書き込み(およびロック)する代わりに、書き込みはトランザクションが完了したときに一度だけ行われます。
最初の段落でリリースしたと言ったサイトはSQLiteに戻りました。コードをいくつかの場所で調整すると、サイトは非常にスムーズに動作します。
*このサイトは利用できなくなりました
Sqliteはシングルユーザーの観点からスケーラブルであり、私は非常にうまく機能するマルチギガバイトのデータベースを持っていて、それに関して多くの問題を抱えていませんでした。
しかし、それはシングルユーザーなので、あなたが話しているスケーリングの種類に依存します。
コメントに応じて。マルチユーザー環境でSqliteデータベースの使用を妨げるものはありませんが、すべてのトランザクション(事実上、データベースを変更するすべてのSQLステートメント)がファイルをロックするため、他のユーザーがデータベースにアクセスできなくなりますすべて。
そのため、データベースに多くの変更を加えた場合、基本的にスケーリングの問題に非常に早くぶつかることになります。一方、書き込みアクセスに比べて読み取りアクセスが多い場合は、それほど悪くはないかもしれません。
しかし、SQLiteはもちろんの意志機能マルチユーザー環境では、それはないでしょう実行も。
SQLiteは、sqlite.orgのWebサイトなど、トラフィックの多いサイトを駆動します。彼らはあなたが持っていることを示唆している場合未満100kの一日あたりのヒットを、SQLiteのは、罰金を動作するはずです。そして、それは「先行書き込みロギング」機能を提供する前に書かれました。
SQLiteでスピードアップしたい場合は、次のようにします。
先読みロギングの使用方法を示し、書き込み速度が5倍向上することを示す、YouTubeで「先読みロギングによるSQLiteのパフォーマンスを向上させる」という私のビデオをご覧ください。
Sqliteはデスクトップまたはインプロセスデータベースです。SQL Server、MySQL、Oracle、およびそれらの兄弟はサーバーです。
デスクトップデータベースは、その性質上のための良い選択ではありません任意のデータストアへの同時書き込みアクセスをサポートする必要があるアプリケーション。これには、これまでに作成されたほとんどのWebサイトがある程度含まれます。なんらかの理由でログインする必要がある場合でも、おそらくDBへの書き込みアクセスが必要です。
このSQLiteドキュメント-http : //www.sqlite.org/whentouse.htmlを読みましたか?
SQLiteは通常、低から中程度のトラフィックのWebサイト(つまり、すべてのWebサイトの99.9%)のデータベースエンジンとして適切に機能します。SQLiteが処理できるWebトラフィックの量は、もちろん、Webサイトがデータベースをどれだけ頻繁に使用しているかによって異なります。一般的に言って、1日あたりのヒット数が10万未満のサイトはSQLiteで正常に動作するはずです。10万ヒット/日の数値は控えめな見積もりであり、ハードな上限ではありません。SQLiteは、その10倍のトラフィック量で動作することが実証されています。
SQLiteのスケーラビリティは、使用するデータとその形式に大きく依存します。私は、非常に長いテーブル(GPSレコード、1秒あたり1レコード)で、いくつかの厳しい経験をしました。経験から、SQLiteは段階的に速度が低下することがわかりました。これは、インデックスを保持している成長しているバイナリツリーの絶え間ない再調整が原因です(タイムスタンプ付きのインデックスでは、ツリーが大幅に再調整されることを知っているだけでなく、検索)。したがって、最終的には約1 GB(大体、私は知っています)で、私の場合、クエリが遅くなります。あなたの走行距離は異なります。
覚えておくべきことの1つは、自慢のすべてにもかかわらず、SQLiteはデータウェアハウジング用に作成されていないことです。SQLiteには推奨されないさまざまな用途があります。SQLiteの背後にいる立派な人々はそれを彼ら自身と言います:
SQLiteのもう1つの見方は次のとおりです。SQLiteはOracleを置き換えるようには設計されていません。fopen()を置き換えるように設計されています。
そしてこれは主要な議論につながります(量的ではなく申し訳ありませんが質的です)、SQLiteはすべての用途に適しているわけではありませんが、MySQLは理想的ではないにしても、さまざまな用途に対応できます。たとえば、MySQLに(SQLiteの代わりに)Firefox Cookieを保存させることもできますが、そのサービスを常に実行する必要があります。一方、MySQLの代わりにSQLiteでトランザクションWebサイトを実行することもできますが(多くの人がそうです)、多くのダウンタイムが予想されます。
ATTACH DATABASE
してすべてのテーブルで仮想データベース接続を作成することもできます(ただし、62データベースに制限されます)。
このように考えてください。SQL Liteは、誰かが使用するたびにロックされます(SQLiteは読み取り時にロックしません)。したがって、複数の同時ユーザーがいるWebページまたはアプリケーションを提供している場合、SQLLiteを使用して一度にアプリを使用できるのは1人だけです。つまり、スケーリングの問題があります。その1人用のアプリケーションが、何百ものタイトル、評価、情報、使用、再生、再生時間を保持するミュージックライブラリと言えば、SQL Liteは数百万とは言わないまでも数千のレコードを保持して美しくスケーリングします(ハードドライブは喜んで)
一方、MySQLは、世界中の人々が同時にMySQLを使用するサーバーアプリに適しています。ロックせず、かなり大きいです。したがって、あなたの音楽ライブラリMySqlは、たった1人しか見ることができないのでやりすぎです。ただし、これは何千ものライブラリが追加または更新される共有音楽ライブラリではありません。次に、MYSQLを使用します。
したがって理論的には、MySQLはSqlliteよりもスケーラビリティが高いため、複数のユーザーを処理できますが、シングルユーザーアプリには過剰です。
SQLite上に構築されたデータベースサーバーであるREAL SQL Serverをチェックする価値があるかもしれません。