11

職場では、いくつかの異なるプロジェクトで 4 人が一緒に働いています。プロジェクトごとに、それぞれが取り組んでいるローカル コピーがあり、その後、開発、ステージング、およびライブ デプロイがあり、さらにブランチ (Subversion を使用) があります。私たちのデータベースは MySQL です。

そこで私の質問は、データベースのどのリビジョンが各展開 (および開発者の場合はローカル コピー) に対して行われたかを管理する良い方法は何かということです。現在、各変更は、名前にタイムスタンプが付けられたテキスト ファイルに保存され、プロジェクトの下のフォルダーに配置されます。正直なところ、これはあまりうまく機能していません。何がどこに適用されたかを追跡するのに役立つソリューションが必要です。

4

3 に答える 3

8

http://odetocode.com/Blogs/scott/archive/2008/01/30/11702.aspx

上記のブログから、現在のデータベース バージョン管理システムにたどり着きました。簡単に言えば、更新スクリプトなしでは DB の変更は行われず、すべての更新スクリプトはソース管理リポジトリにあります。

私たちはスキーマの変更のみを管理しますが、データのダンプをバージョン管理で利用できるようにしておくことも検討できる場合があります。そのようなファイルを作成することは、mysqldump を使用する非常に簡単な作業です。

私たちのソリューションは、ブログで紹介したソリューションとは 1 つの重要な点で異なります。それは、自動化されていないことです。データベースの更新などを手動で適用する必要があります。これには少し時間がかかる可能性がありますが、完全に自動化されたシステムに必要な作業の一部が延期されました。しかし、自動化したことの 1 つは、ソフトウェアでの db バージョンの追跡です。これは非常に単純で、ソフトウェアが実行対象のデータベースを認識し、操作対象のスキーマを認識している場合にのみ実行されるようにします。

私たちのソリューションの最も困難な部分は、ブランチからの更新をトランクにマージする方法でした。2 人の開発者がブランチを同時に DB 更新とマージしようとする可能性と、その処理方法に対処するためのワークフローを開発するのに時間を費やしました。最終的に、バージョン管理でファイルをロックすることにしました (問題のファイルは、実際には、手動管理戦略を支援するソフトウェア バージョンとデータベース バージョンをマッピングするテーブルです)。スレッドのクリティカル セクションと同じように、ロックはトランクの更新について行われます。完了すると、他の開発者はロックできるようになり、スクリプトに必要な変更を加えて、予想されるバージョンの競合やその他の悪い障害が回避されるようにする責任があります。

于 2008-10-01T02:54:58.770 に答える
5

すべてのデータベース スクリプト (データとスキーマ/ddl) をバージョン管理しています。また、変更の中央カタログも保持しています。開発者がスキーマ/DDL ファイルに変更を加えるか、何らかの方法でデータを変更するスクリプトを追加すると、それらのファイルは SVN コミット番号と共にカタログに追加されます。

カタログの変更を読み取り、カタログの各リビジョンからコンテンツを取得して適用することで、カタログのコンテンツに基づいて大きな更新スクリプトを作成する小さなユーティリティを社内でまとめました。コンセプトはDBDeployツールにかなり似ていますが、これは元々Thoughtworksから来たものだと思いますので、それを利用できるかもしれません。少なくとも開始するのに適した場所を提供し、その時点から、ニーズにより直接的に適したソリューションをカスタマイズできます.

頑張ってください!

于 2008-10-01T03:08:29.097 に答える
2

データベースが一連のデータ アクセス オブジェクトに適切にマップされている場合は、「移行」の使用を検討してください。アイデアは、データ モデルをアプリケーション コードとして保存し、各データベース バージョンを前後に移動するための手順を実行することです。

Rails が最初にそれを行ったと思います。

Java には少なくとも 1 つのプロジェクトがあります。

そして、これが.NET 移行ライブラリです。

バージョンを変更するには、アップ バージョンまたはダウン バージョンのすべてをステップ実行する単純なスクリプトを実行して、目的のバージョンに到達します。その利点は、移行をアプリ コードと同じソース リポジトリにチェックインすることです。すべてが 1 か所にあります。

他の人が他の移行ライブラリを提案できるかもしれません。

乾杯。

編集: https://stackoverflow.com/questions/313/net-migrations-engineおよび.NET データベース移行ツールのまとめ(上記の投稿から) も参照してください。

于 2008-10-01T03:53:53.277 に答える