以前のデータを新しいシステムに移行する必要がある会社のプロジェクトに取り組んでいます。明らかに、両方の構造はまったく異なります。私はデータベース操作に休止状態を使用しており、データを移行するための最良の方法について混乱しています。休止状態を使用する必要がありますか、ストアド プロシージャを作成する必要がありますか、それとも別のオプションがありますか? 明るいアイデアは大歓迎です。
5 に答える
過去に両方のアプローチを試してきたので、これは ORM が設計されたシナリオでも、それが繁栄するシナリオでもないと断言できます。最終的に 2 つの異なるオブジェクト セットを構築する必要があり、一括移行に必要な効率を得るのは困難です。休止状態のようなものを使用する唯一の理由は、2 つのシステムを統合するために 2 つのシステムの間に永続的に存在するシステムを構築する場合ですが、これは比較的短期的なものに思えます。
私は、データを変換するための Python スクリプト、一連の SQL、およびいくつかの Python オブジェクトの結果に非常に満足しています。
さまざまなリリースを通じてコードとデータ表現を変更するため、データの移行を管理しようとしました。毎回、古い状態のオブジェクトを照会し、新しい列にデータを入力する特定の SQL を作成することになりました。すべてをオブジェクトとして表示しながらデータ移行を管理する簡単な方法がある場合、私はそれを考えたことはありませんでした。これまでのところ、新しい列には常に、SQL で計算できる単純な解釈が含まれています。
それらのいくつかは、コードが最終的に Java になるほど単純であり、他の変更は、複数の SQL ステートメントが必要なほど複雑であるため、それらをシェルと Python (どちらも移植性のために) スクリプトに埋め込むことになりました。スクリプトはここにあり、 updateDB2008_4() のようなメソッド名を持つJava コードがあります。
Hibernate は、ストアド プロシージャとうまく連携できません。「自然にフィットする」ものではありません。ORM が既にマップされており、「現状」と「予定」のオブジェクトがセットアップされている場合は、通常の休止状態メソッドを使用して新しいレイアウトにデータを書き込みます。
StoredProcedure の方法を使用せざるを得ない場合は、痛みを飲み込み、変換をストアド プロシージャにコーディングするかどうかを決定できます。そうすれば、すべての移行スクリプトがまとめられます。
他の投稿者が言ったように、ここでは Python のようなスクリプト言語が役に立ちます。私にとってもうまくいきました。
「最善」についてはわかりませんが、私があなたの立場にある場合は、Hibernate または同様の ORM を使用することをお勧めします。その理由は、2 つのデータベース間で使用するオブジェクト階層があるためです。スキーマが非常に似ている場合は、単純な SQL スクリプトの方が簡単かもしれません。それは本当にあなたの状況が何であるか、そしてその詳細に依存します.
編集:朝のカフェインが本当に必要です...
私が注意しようとしていたことは、私の後に投稿した 2 人によって指摘されました。スキーマが定義されていて、オブジェクトが既にある場合、またはリバース エンジニアリング ツールに精通している場合は、休止状態を使用するのが簡単です。ただし、それが 1 回限りのことである場合は、スクリプトの方が確実に適しています。
個人的には、おそらく SSIS のような ETL ツールを使用します (SQL Server から、または SQL Server に移動する場合)。大量のデータの移動は、ETl ツールが設計および最適化されているものです。