1. ホーム
  2. sqlite

[解決済み] SQLiteのスケーラビリティは?[クローズド]

2022-04-14 18:40:28

質問

私は最近、この質問を読みました。 SQLiteとMySQLの比較 という回答があり、SQLiteは拡張性に乏しいと指摘されており、公式サイトの これを確認する しかし

SQLiteのスケーラビリティはどの程度ですか、またその上限は?

解決方法は?

昨日、小さなサイトをリリースしました。 * このデータベースは、すべての訪問者のために共有のSQLiteデータベースを使用しています。残念ながら、私のホストにかかる負荷が控えめであっても、動作はかなり遅かったです。これは、更新や挿入を含むため、誰かがページを見るたびにデータベース全体がロックされたからです。すぐに MySQL に切り替え、あまりテストする時間がなかったのですが、SQLite よりもはるかにスケーラブルに思えました。ただ、ページの読み込みが遅いことと、sqliteでシェルからクエリを実行しようとすると、時々データベースがロックされたエラーが発生したことを覚えています。とはいえ、私はSQLiteから別のサイトをうまく動かしています。違いは、そのサイトが静的であること(つまり、データベースを変更できるのが私一人であること)、そのため、同時読み取りがうまくいくことです。この話の教訓は、データベースの更新がめったに起こらない(ページを読み込むたびに起こるより少ない)ウェブサイトにのみSQLiteを使用することです。

編集 : SQLiteに対してフェアでなかったかもしれないことに今気づきました - ウェブページからSQLiteデータベースを提供する際に、カラムのインデックスを作成していませんでした。これが部分的に私が経験していた速度低下の原因でした。しかし、データベースロックの観察は有効です。特に負荷のかかる更新がある場合、SQLiteのパフォーマンスはMySQLやPostgresにはかないません。

を編集しました。 3ヶ月ほど前に投稿してから、SQLiteのスケーラビリティを精査する機会がありましたが、ちょっとした工夫でかなりスケーラブルになります。最初の編集で述べたように、データベースのインデックスはクエリ時間を劇的に短縮しますが、これはSQLiteについてというよりも、データベースについての一般的な観察です。しかし、SQLiteを高速化するために使用できる別のトリックがあります。 トランザクション . データベースへの書き込みを複数回行わなければならない場合は、常にトランザクションの中に入れてください。書き込みクエリを発行するたびにファイルに書き込む(そしてロックする)代わりに、書き込みはトランザクションが完了したときに一度だけ行われます。

最初の段落でリリースしたと書いたサイトがSQLiteに戻され、数カ所コードをチューニングしたらかなりスムーズに動くようになりました。

* このサイトはもう利用できません。