現在、開発者は全員、本番データベースのスナップショットを備えたローカル開発環境を持っています。これにより、自分以外の誰にも影響を与えることなく、データをねじったり、解約したり、打ち負かしたりできます。
これらのスナップショットは大きくなり始めており、それらのデータインポートには1時間近くかかり始めています。
開発データを維持するためのより良い推奨事項はありますか?開発データは、潜在的な変更のために分解することができ、変更のアイデアが悪かった場合などは、元に戻す必要があります。
現在、開発者は全員、本番データベースのスナップショットを備えたローカル開発環境を持っています。これにより、自分以外の誰にも影響を与えることなく、データをねじったり、解約したり、打ち負かしたりできます。
これらのスナップショットは大きくなり始めており、それらのデータインポートには1時間近くかかり始めています。
開発データを維持するためのより良い推奨事項はありますか?開発データは、潜在的な変更のために分解することができ、変更のアイデアが悪かった場合などは、元に戻す必要があります。
私は次のアプローチを使おうとしています。
開発者は、バージョン管理下にあるベースラインスクリプトを維持し、データベーススキーマを最初から設定します。本番データベースに存在するのと同じようにスキーマを作成します。
また、テストデータを設定するための「スクリプト」も保持しています。この「スクリプト」は、実際には本番クラスを使用し、その上に小さなDSLを使用することもあります。適度に高速にするために、スクリプトは最小限のテストデータのみを生成します。新しい機能ビルドのテスト日付を作成するために、doneの定義の一部にすることをお勧めします。
開発者は、データベース(またはデータベーススキーマ)でこれらのスクリプトを自由に実行できます。最初のスクリプトは、自動データベーステストを実行するための基礎としても使用されます。
開発者が行った作業の結果は、移行スクリプトです。つまり、本番データベースに適用して、データの更新など、新しい目的の状態にすることができるスクリプトです。
これらの移行は、本番データベースのスナップショットでテストできます。本番データベースのスナップショットは、負荷テストとパフォーマンステストの実行にも使用されます。
スナップショットの場合のみ、データベース固有のツールを使用します。他のほとんどすべてはメインプログラミング言語(私にとってはJava)で書かれているので、開発者はそれを快適に使用できます。
このアプローチに対する抵抗に遭遇することがよくあります(「スクリプトが多すぎる」、「データベースが多すぎる」、「データベースモデリングツールがバージョン管理をサポートしていないため、バージョン管理を使用したくない」)。しかし、手作業の負荷からのアパートは、私は実際に代替案を見ていません。
通常、開発者は、開発データベースからいくつかの設定を行う必要があります。
簡単に操作できるようにする必要があります。変更を加え、それらの変更をバージョン管理し、他の環境に適用するのは簡単である必要があります。
代表的なデータが必要であり、そのデータを予測可能にする必要があります。たとえば、請求システムを構築している場合は、既知のクレジット制限を持つクライアントが必要です。これにより、テストケースを作成して、請求書の発行や支払いなどでクライアントに何が起こったかを追跡できます(単体テストではなく統合テスト) 。
代表的なデータボリュームに対してクエリを実行できるようにする必要があるため、本番環境だけでなく開発環境でもパフォーマンスの問題が発生します。
「実際の」データに影響を与えたいとは決して思わないでしょう。たとえば、電子メールアドレスと名前を匿名にしたり、パスワードを再設定したりする必要があります。
継続的なデータベース統合は、このほとんどの解決策を提供し、「開発環境用のデータベースをセットアップするのに1時間かかる」問題も解決します。
私の経験では、環境ごとに一元化されたDB +データ(開発、テスト+統合、本番)を用意することが最善のアプローチでした。
私も同じ状況です。アーカイブデータを読み取り専用のファイルグループに移動して、バックアップと復元を1回だけ行う必要があると考えました。非アーカイブデータははるかに小さく、バックアップストレージと開発マシンに頻繁にコピーされる可能性があります。
もちろん、これは、データベースサイズの大部分を読み取り専用ファイルグループに分割できる場合にのみ機能します。
別のアイデアは、開発マシンで1回復元し、データベーススナップショットを使用してクリーンな状態にすばやく復元することです。私はそれが特に有用だと思いました。