- SQLiteデータベースをコンピュータ間でより高速にコピーする方法についての説明
- データベースのインデックスがコピー速度を遅くする主な原因
- SQLiteの
.dumpコマンドを使ってデータベースをテキストファイルとしてダンプできる
- テキストファイルは元のデータベースより小さく、圧縮するとさらに小さくなる
- この方法により、大容量データベースをより高速かつ安定してコピーできる
コンピュータ間でSQLiteデータベースをより高速にコピーする方法
- リモートサーバーに保存されたSQLiteデータベースをローカルコンピュータにコピーする方法についての説明
- 初期のプロジェクトでは
rsyncコマンドを使って簡単にコピーできる
- データベースが大きくなるとコピー速度が遅くなり、信頼性も低下する
データベースダンプをテキストファイルにする
- SQLiteは
.dumpコマンドを使ってデータベースをテキストファイルにダンプできる
- このテキストファイルはSQL文で構成されており、元のデータベースより小さくなることがある
- インデックスはテキストファイル内では単一行に縮約され、保存容量を節約できる
圧縮による保存容量の節約
- テキストファイルは圧縮するとさらに小さくなる
- 例えば、元のSQLiteデータベースが3.4GBの場合、gzipで圧縮したテキストファイルは240MBまで減る
- 圧縮されたテキストファイルをダウンロードすれば、データベースのコピーははるかに高速になる
新しいssh+rsyncコマンド
- サーバー上でgzip圧縮したテキストファイルを生成し、ローカルコンピュータにコピーしたあとデータベースを再構築する
- サーバーで圧縮済みテキストファイルを生成:
ssh username@server "sqlite3 my_remote_database.db .dump | gzip -c > my_remote_database.db.txt.gz"
- ローカルコンピュータへファイルをコピー:
rsync --progress username@server:my_remote_database.db.txt.gz my_local_database.db.txt.gz
- 展開してデータベースを再構築したあと、ローカルファイルを削除する
データベースダンプは信頼できるコピー元
- データベースのコピー中に更新が発生すると、
rsyncが壊れたデータベースファイルを生成してしまう可能性がある
- テキストダンプを作成して安定したコピー元を提供することで、この問題を解決できる
- この方法は大容量データベースを扱う際の時間を節約し、ダウンロードをより高速かつ信頼性の高いものにする
1件のコメント
Hacker Newsの意見
--rsyncableオプションを使って最適化できる。圧縮率はやや下がるが、差分を局所化して圧縮出力全体に影響しないようにする