2

私が取り組んでいるアプリケーションの1つのデータベースは、ビジネスによってまだ確認されていません。

  • 最良の推測はOracleとDB2です。
  • 私が聞いたのは、最初にプロジェクトがDB2 V9で稼働し、次にOracle11gで稼働するということです。

このプロジェクトでは、Spring 3.0.5、Hibernate 3.5、JPA2、JBoss5を使用しています。

では、ここでビルドフェーズとテストフェーズに入るベストプラクティスは何ですか?

  1. 最初にDB2を使用してビルドし、後でOracleについて心配しますか(これは正しく聞こえません)?
  2. または、JPA(Hibernate)を使用して記述し、データベーススキーマを生成しますか?
  3. または、他の何か?

PS:DBの選択、何をいつ行うかを制御することはできません。これらは、素敵な部屋に座っている人々がファットチェックと大きなボーナスを受け取ることによって行われる戦略的な決定だからです。

ありがとう、アディ

4

4 に答える 4

4

アプリケーションデータベースを不可知論者として作成している場合は、明らかにデータベースの特定の機能へのアクセスを失っています。データベースは、JPAとHibernateによって実行される自動最適化を除いて、共通の機能に縮小されています。いくつかのことを自動に設定し、JPA / Hibernateを信頼して、データベースを知っている場合に具体的に設定できるようにする必要があります(IDジェネレーター戦略など)。

ただし、データベースの特定の開発者機能は決定に関連していないため、アプリケーションに関連していないようです。決定に影響を与える可能性のある他の理由(価格、金銭、現金、個人的な関係、管理ツール、ハードウェア要件、既存の知識、人事など)は推測することしかできません。

だから私見あなたは選択の余地がありません。データベース固有のものは絶対に避けてください。これには、JPA / Hibernateにスキーマを生成させることも含まれます(ポイント#2)。このプロジェクトのセットアップでは、データベースを手動でいじってはいけません。

残念ながら、JPA / Hibernateの開発には、データベースに依存する隠れたトラップがいくつかあります(たとえば、対数関数は一貫してマップされていません)。したがって、最初からすべての可能なデータベースに対してすべてのテストを実行する必要があります。「最良の推測は...」と書くときは、利用可能なデータベースを取得して、それに対してテストする必要があります。指定されたスタックで簡単にセットアップする必要があります。

また、可能であれば、使用するデータベースに関する決定を早めるようにしてください。

于 2012-01-31T11:35:56.460 に答える
2

「JPA(Hibernate)を使用して書き込む」だけで、データベースに依存しないように開発できます。すべてのビジネスロジックをストアドプロシージャではなくJavaコードに入れます。

スプリングを使用している場合は、jbossは必要ありません。Tomcat、フットプリントの約4分の1、およびはるかに単純なimhoを使用できます。

Spring vs Jbossおよびjbossはすべての悪いことを表し、SpringはJavaエンタープライズ開発のすべての良いことを表します

于 2012-01-31T11:18:25.690 に答える
0

この問題を追加し、プロジェクトの後半に移行する必要があったため、多くの余分な作業、フラストレーション、遅延が発生しました。

私のアドバイスは、抽象レイヤーを定義することです。たとえば、テーブルやテキストファイルなど、データベースのないデータモデルがある可能性がある点に移動します。

その後、データベースに切り替える必要がある場合は、データベースを最適化しながら、すでに開発されているモデルでアプリケーション開発を自由に続けることができます。したがって、DB2レイヤーを調整している間、アプリの開発者を遅らせることはありません。すべてが適切に検証されると、チームはそれをオンに切り替えることができます。

于 2017-01-20T13:20:26.347 に答える
0

私は、データベース固有のものを避けることを提案する現在受け入れられている答えに同意しません。パフォーマンスの観点からすると、それは残念なことであり、間違いなく実行可能です。

JPA / HibernateおよびjOOQは多くのことを抽象化でき、いずれかのテクノロジーのクエリビルダーAPI(JPAの基準クエリ、またはより高度なSQLの場合はjOOQ)を使用している場合は、ベンダーに依存しない方法で非常に遠くまで到達できます。ベンダー固有のものをすべて削除せずに。たとえば、次のようなベンダー固有の述語を簡単に作成できます。

.where(oracle ? oracleCondition() : db2Condition())

このようなプロジェクトの最初から、両方の方言をサポートする必要があることがわかったら、両方のデータベース製品で統合テストを実行する必要があります。このために、このようなテストの実行を非常に簡単にするtestcontainersをお勧めします。別の方言のサポートを追加する必要があり、上記の抽象化のいずれかを使用している場合は、別のtestcontainers構成を追加し、アプリケーションが引き続き機能するかどうかを確認し、2〜3の調整を行うだけで、設定が完了します。

免責事項:私はjOOQの背後にある会社で働いています。

于 2021-08-20T08:36:43.230 に答える