0

hibernateとmysqlおよびtomcatを使用するWebアプリケーションを構築しています。製品の進化に伴い、常に新機能が求められています。これは、多くの場合、データモデルを変更する必要があることを意味します。

私が今していることは、データベースのすべての重要なデータをフラットファイルにエクスポートすることです。データベースとサーバーをシャットダウンし、新しい休止状態のマッピングとmysqlのテーブルと列に一致するようにデータベースを再構成し、保存されたデータをプログラムでインポートして新しいデータモデルに適合させてから、サーバーを再起動します。

他に何が推奨されますか?

4

3 に答える 3

0

他に推奨されるものはありません。この方法がうまくいくなら、それは問題ありません。alterステートメントを使用して、データベーススキーマを進化させることもできます。データ量が多いためにフラットファイルとの間でエクスポートおよびインポートができなくなった場合は、一時テーブルを使用してデータなどを移行します。ただし、ある時点で、データを何らかの方法で移行する必要があります。

于 2012-07-15T07:19:52.200 に答える
0

dbdeployまたは同様のインクリメンタルデータベースツールを使用て、アップグレード間にデルタを追加することができます。

彼らはあなたのためにデータベースのバージョンを追跡し、あなたが開発するにつれて、あなたが行うモデルの変更ごとに新しいデルタを追加します。本番サーバーをアップグレードするときは、それに対してdbdeployを実行し、データベースがどのような状態にあるかを判別してから、必要なアップグレードのみを適用します。

つまり、データをエクスポートして再インポートする必要はありません。既存のデータモデルに更新を適用するだけです。これにより、展開時間が大幅に短縮されますが、それでも少し停止します。

アップグレードする前にデータベースのダンプを取得することをお勧めします。そうすると、問題が発生した場合に迅速にロールバックできるためです。

編集

EngineYardが移行を使用してダウンタイムをゼロにする方法についてこのリンクを見つけました-Rubyを使用していますが、アプローチはここで概説したものと似ています。

于 2012-07-15T07:45:32.237 に答える
0

ゼロダウンタイムの展開に関心がある場合は、これに取り組む方法がたくさんあります。これを達成するためのさまざまな戦略の概要を説明したこのブログ投稿を見つけました。

基本的な要点は、メインアプリケーションに対して別の時間にデータベースのアップグレードを実行し、データベースにnull許容列があり、列が不思議に表示または非表示になるようにコードを調整できるようにすることです。

著者は、さまざまなテクノロジーに対してこれを行うためのいくつかの戦略を示していますが、休止状態でこれを行うのは少し面倒だと認めています。

Hibernate –特に列が削除されている場合、動作させるのに少しバグがある可能性があります。通常、実装クラスの複数のバージョンを使用して、永続クラスの共通インターフェースを作成することになります。SessionFactoryを初期化する前に、スキーマまたは結果セットのメタデータを使用して、Hibernateに接続するクラスのセットを決定できます。Javaの他の永続化テクノロジー、特に起動時にクラスのバイトコードをインストルメント化することを好む多くの種類のJPAには、さらに悪い問題が存在します。

それは素晴らしくて興味深い記事であり、私はそれをすべて読むことをお勧めします。

(FacebookとYahooはHibernateを使用しません!)

ユーザーの観点からダウンタ​​イムがゼロのように見えるようにするには、通常、ロードバランサーで保護されたアプリケーションクラスターを使用する必要があります。そのため、再起動中にユーザーがアクセスしようとせずに、各アプリをポリシーから外してアップグレードできます。セッションの粘着性、データソースの一貫性、その他のあらゆる種類のことを考慮する必要がありますが、主なことはそれが魔法ではないということです。

于 2012-07-26T17:19:12.967 に答える