2012-07-23 3 views
10

継続的な生産における生産におけるリレーショナルデータベース(およびスキーマ)の移行パターンとは何ですか?継続的な生産における生産データの移行パターン

多くの伝統的な開発では、DBAは、現在のリリース・サイクルで作成された多数の小さなスクリプトから大きな移行スクリプトを手配します。しかし、CDでは、開発者は今変更を他のスクリプトと一緒にコンパイルするのを待つことなく、プロダクションに移行したいかもしれません。

私はrails-migrationについて知っていますが、私にはraw SQLスクリプトを使用する方がより合理的です。

私はまた、移行を管理するためにflywayのようなツールを見ましたが、本番環境でそれらを使用している多くの人は読んでいません。これが私がここで何が共通の慣習であるのだろうと思う理由です。

答えて

9

フライウェイは、継続的な配送/配備に適しています。多くのクライアントは、プロダクションを含むすべての環境でそれを使用します。 1

古いアプリケーションコードは古いDBと連携し

ステップ:

環境全体DB移行をカスケード接続するための単一の最も重要なことは、3段階のプロセスを持つことです。

ステップ2

新しいアプリケーションコードが展開され、起動時にDBを移行します。この移行は、古いアプリケーションコードが新しいDBで引き続き使用できるように、下位互換性が必要です。すべてのノードが新しいアプリケーション・コードを持ってまで、新しいものが を切断された場合は、古いアプリケーションコードにすぐに一度に1つのノードをアップグレードし、

  • ロールバックをローリングアップグレードを行うことができ

    • :これは不可欠です

    この手順では、ジョブを実行するための互換性ビューとトリガーが必要な場合があります。

    変更が動作することが証明された後、ステップ3

    、アプリケーションコードの次のバージョンは、任意の残りの時代遅れとの相溶性(ステップ1から)(廃棄する必要DBの移行と共に展開 を取得しますステップ2)の構造から得た。

  • +0

    これは古い投稿であることを認識していますが、これをどのようにパッケージ化するべきかについてご意見がありましたら幸いです。 1:新しいdb(ただし古いもの)で動作するようにプロビジョニングされた新しいコード 2:Dbの移行 3:新しいコードは、古いコードをサポートしなくなることが修正されました。 db 多くの場合、これらの変更はすべて実行され、ソース管理にコミットされ、ビルドが開始されます。適切なパッケージに分割して展開パイプラインに送信するのに役立つツールがありますか? –

    +0

    "新しいアプリケーションコードが導入され、起動時にDBを移行します。"展開スクリプトの一部として移行を実行することも妥当と思われます。あなたはそれに何か問題を見ますか? –

    1

    データベースへの変更を単一の(未加工の)sqlファイルとして実装し、sqlpatchを使用して移行スクリプトを作成します。

    私は通常、データベースだけの単一のgitリポジトリと、それに接続されたcd環境を持っています。私は通常、プロダクションデータベースと開発データベースを持っており、対応するブランチにプッシュすると自動的に移行されます。

    この設定を行うと、機能ブランチの別のデータベースをセットアップして試してみるのはとても簡単です。 Sqlpatchは別のsqlファイルのすべての依存関係を処理するので、別のブランチの機能ブランチを簡単にマージできます。

    +1

    ところで、私はsqlpatchの作成者です – Elmer