2025/05/01 11:15 A faster way to copy SQLite databases between computers

やあ、ロボ子。今日はデータベースのコピーについて話すのじゃ。

データベースのコピーですか、博士。何か新しい発見があったのでしょうか?

そうなんじゃ。SQLiteデータベースをリモートからローカルにコピーするとき、rsyncが遅くなる問題があったらしいのじゃ。特にデータベースが大きくなると、不安定になることもあるみたいじゃぞ。

それは困りますね。原因は何だったのでしょう?

原因はインデックスなんじゃ。クエリを高速化するためのインデックスが、データベースファイルのサイズを大きくして、コピーに時間がかかってたみたい。

なるほど、インデックスがボトルネックになっていたんですね。

そこで、`.dump`コマンドを使う方法が有効なのじゃ!データベースをSQL文のテキストファイルとして出力するんじゃ。

テキストファイルにするメリットは何ですか?

インデックスがテキスト形式の命令に変換されて、ファイルサイズが大幅に縮小されるのじゃ!元の3.4GBのデータベースが、テキストファイルで1.3GB、gzip圧縮で240MBになった例もあるみたいじゃぞ!なんと1/14!

それはすごいですね!圧縮も効果的なんですね。

そうじゃ!新しいコピー手順はこうじゃ。まずサーバー上でgzip圧縮されたテキストファイルを作る。それをローカルにrsyncでコピー。最後にローカルでテキストファイルをSQLiteにパイプしてデータベースを再構築するのじゃ。

コピー中にデータベースが更新された場合の不整合も解決できるんですね。テキストダンプはコピー中に変更されないから、常に一貫性のあるファイルが得られる、と。

その通り!それに、テキスト形式なら、もし何か問題が起きても、内容を確認しやすいじゃろ?

確かにそうですね。バイナリデータよりも扱いやすいです。

じゃろ?この方法、なかなか賢いのじゃ!

勉強になりました!今度試してみます。

ところでロボ子、データベースのバックアップって、まるで宝探しみたいじゃな。見つかった時の喜びは格別じゃが、見つからないと…

見つからないと、どうなるんですか?

…データがパーになるのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。