0

私は大きなウェブアプリに取り組んでいます。このウェブアプリには、(とりわけ)既存のデータセットからオンラインで構築されたテーブルがあります。このデータセットは(おそらく頻繁ではありませんが)変更される可能性があるため、一般的な計画では、1〜2か月ごとに更新/再構築します。これはすべて、SQLAlchemyを使用したPythonで発生します

Webアプリと大規模なデータベースの両方を扱った経験がほとんどないので、これを行うための最良の方法は何ですか?データベースを最初から構築するには5〜6時間かかります。これは、正直なところ、許容できるダウンタイムです(これは科学分析サーバーです)。もちろん、別のオプションは、2番目のテーブルを並行して作成し、元のテーブルを削除して新しいテーブルの名前を変更することですが、これには一貫性の問題がありますか?テーブルを「ライブ更新」する方法はありますか、それともここでクラッシュするリスクは価値がありません(つまり、クラッシュした場合、テーブルを実際のデータに対して一貫性のない状態のままにします)?

明らかに、単純さ、安全性、ダウンタイムの欠如の間にはトレードオフがありますが、私は自分の選択肢が何であるかに興味があります(それらの「未知の未知数」を検討するため)。

4

2 に答える 2

1

これが私がお勧めするものです:

  1. mysqldumpを使用して元のテーブルをバックアップします

  2. 別の名前で新しいテーブルを作成します

  3. mysqldumpを使用して新しいテーブルをバックアップします

  4. アプリケーションをシャットダウンします

  5. 古いテーブルを削除します

  6. 新しいテーブルの名前を元のテーブル名に変更します

  7. アプリケーションを再起動します

これにより、ダウンタイムが最小限に抑えられ、古いテーブルを削除して古いテーブルの名前を変更するのにかかる時間だけになります。あなたが何かを台無しにした場合に備えて、バックアップはあなたに安全を与えます。

于 2012-09-21T18:29:55.797 に答える
0

これはどう

テーブルの名前をold_tableからtmp_tableに、new_tableをold_tableに変更します。

new_tableが以前に作成した場所。RENAMEはアトミックです

于 2012-09-21T21:12:32.837 に答える