[解決済み] SQLiteのスケーラビリティは?[クローズド]
質問
私は最近、この質問を読みました。 SQLiteとMySQLの比較 という回答があり、SQLiteは拡張性に乏しいと指摘されており、公式サイトの これを確認する しかし
SQLiteのスケーラビリティはどの程度ですか、またその上限は?
解決方法は?
昨日、小さなサイトをリリースしました。 * このデータベースは、すべての訪問者のために共有のSQLiteデータベースを使用しています。残念ながら、私のホストにかかる負荷が控えめであっても、動作はかなり遅かったです。これは、更新や挿入を含むため、誰かがページを見るたびにデータベース全体がロックされたからです。すぐに MySQL に切り替え、あまりテストする時間がなかったのですが、SQLite よりもはるかにスケーラブルに思えました。ただ、ページの読み込みが遅いことと、sqliteでシェルからクエリを実行しようとすると、時々データベースがロックされたエラーが発生したことを覚えています。とはいえ、私はSQLiteから別のサイトをうまく動かしています。違いは、そのサイトが静的であること(つまり、データベースを変更できるのが私一人であること)、そのため、同時読み取りがうまくいくことです。この話の教訓は、データベースの更新がめったに起こらない(ページを読み込むたびに起こるより少ない)ウェブサイトにのみSQLiteを使用することです。
編集 : SQLiteに対してフェアでなかったかもしれないことに今気づきました - ウェブページからSQLiteデータベースを提供する際に、カラムのインデックスを作成していませんでした。これが部分的に私が経験していた速度低下の原因でした。しかし、データベースロックの観察は有効です。特に負荷のかかる更新がある場合、SQLiteのパフォーマンスはMySQLやPostgresにはかないません。
を編集しました。 3ヶ月ほど前に投稿してから、SQLiteのスケーラビリティを精査する機会がありましたが、ちょっとした工夫でかなりスケーラブルになります。最初の編集で述べたように、データベースのインデックスはクエリ時間を劇的に短縮しますが、これはSQLiteについてというよりも、データベースについての一般的な観察です。しかし、SQLiteを高速化するために使用できる別のトリックがあります。 トランザクション . データベースへの書き込みを複数回行わなければならない場合は、常にトランザクションの中に入れてください。書き込みクエリを発行するたびにファイルに書き込む(そしてロックする)代わりに、書き込みはトランザクションが完了したときに一度だけ行われます。
最初の段落でリリースしたと書いたサイトがSQLiteに戻され、数カ所コードをチューニングしたらかなりスムーズに動くようになりました。
* このサイトはもう利用できません。
関連
-
SQLiteの文字列比較における大文字小文字の問題の解決法
-
SQLite3における日付と時刻の関数のまとめ
-
Sqliteデータベースの最大挿入データ数は500個です。
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] SQLiteでテーブルが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] AndroidでSQLiteを使用する際に、並行処理の問題を回避するにはどうすればよいですか?
-
[解決済み] Sqliteの複数カラムの主キー
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み】SQLiteの "Insert if not exists "ステートメントについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン