2017-10-26 9 views
0

私はSpringBoot(Spring + Hibernate + MySQL)でwebappを作成しています。Hibernate + MySQLデータのベストプラクティス

私は既に自分のアプリケーションのデータ用にすべてのCRUD操作を作成しています。データを処理してレポートを作成する必要があります。

これらのレポートの複雑さに応じて、いくつかのサマリーまたは事前に処理された表を作成します。このようにして、レポートの作成を1回トリガして効率的に取得できます。

MySQLのすべてのレポートをJavaまたはストアドプロシージャでビルドする必要があるかどうかは間違いありません。 Javaでそれをやっての

長所:私は私のDBエンジンを変更した場合は、例外

  • をキャッチ構造の

    • 詳細ログ
    • その他の制御(エンティティ、マップ、リスト、など)
    • (それは起こりませんが、決して知らないでしょう)

    Javaでそれをすることの短所:

    • おそらくメモリ?

    これについてのご意見はありますか?

    ありがとうございます!

  • 答えて

    1

    Java。どちらも可能ですが。それは最も重要なことと、どのスキルがメンテナンスのために利用可能で、メンテナンスの価格に依存します。ストアドプロシージャは通常非常に高速ですが、可用性とパフォーマンスは、使用する正確なデータベースによって異なります。あなたは特別なスキルが必要です、そして、あなたはそれがすべてその特定のデータベースで働いている。

    Hibernateには、永続化レイヤーから最高のパフォーマンスを得るために、すべてのデータベース用に書かれた特別な方言があります。ストアドプロシージャほど高速ではありませんが、かなり近いです。その上にSpringのデータを置くと、すべての難しさがなくなりました。メンテナンスにかかる費用はそれほど高くなく、Spring Dataを知っている人は、特別なデータベースベンダーよりも利用可能です。

    HQLではさまざまな「難しい」クエリを簡単に作成できます。そのため、そこにブロックはありません。しかし、Hibernateはもっと可能性があります。あなたはキャッシュをeh-cacheで実行させることができ、Hibernateを使用することで、すぐに監査を完了させることができます。これはこのフレームワークに関する素晴らしいことです。これは広く使われており、多くの自由に使用できる依存関係が存在します。将来的にデータベースを変更したい場合は、Spring Dataを使用する際にapplication.propertiesファイルの3つのパラメータを変更することで可能になります。

    いくつかのアノテーションを使用して再生し、より良い結果を得ることができます。たとえば、@Inheritanceの注釈があります。ここでは、いくつかのクラスを同じテーブルにまとめたり、さらに複数のテーブルに分割したりすることができます。また、@MappedSuperclassがあります。そこには、すべてのエンティティが拡張できるIDを持つ1つのJpaObjectを持つことができます。 JPAでもう少し巧妙なやり方が必要な場合は、おそらくthis postにスーパークラスと一般リポジトリの使い方に関する私の答えをチェックしてください。

    1

    これらのレポートの複雑さに応じて、いくつかのサマリーまたは事前に作成されたテーブルを作成します。このようにして、レポートの作成を に一度起動させ、効率的に取得することができます。

    私の最初の考えは、これは必須ですか?これはおそらく必要ないアプリケーションに複雑さを加えるようなものです。時期尚早の最適化とそのすべて。 SQLでレポートを作成し、実行計画を実行してみてください。それが十分であれば、管理するコードが少なくなり、管理するバッチジョブが追加されなくなります。 E.G.それがストレスの下でどのように握っているかを見ることができます。

    報告にquerydslまたはjooqを使用することを検討してください。両方とも、データベースの抽象化レイヤーと、データベース照会のための流暢なAPIを提供しています。これは、「Javaで行うことの利点」セクションに記載されている利点を提供し、問題に適しています。このブログ記事jOOQ vs. Hibernate: When to Choose Whichは読む価値があります。

    +0

    ニースの回答。あなたの質問については、これが必要です。すべてのデータがいくつかのテーブルにあるので必要です。これらのデータをすべて混合してレポートを作成し、合計とパーセンテージなどを作成する必要があります。 JOOQについて聞いたことがありません。それをHibernateと混在させることは可能ですか?私はすべてのCRUD操作のためにHibernateを持っていて、おそらくJOOQをレポートのためだけに使うのですか? –

    +0

    ジョインを実行し、集計関数を使用して合計とパーセンテージを作成し、この余分なテーブルを作成しないでください。あなたが望むものがSQL文で実行できるように思えます。はい、querydslとJOOQは、Hibernateに加えて使用できる別々のフレームワークです。 Hibernateと組み合わせて動作するquerydsl-jpa http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html#jpa_integrationを見てください。 –

    +0

    pojoを使うだけで、あなたのサブワードをあなたの記憶に残すことができます。実際のテーブルを持つ必要はありません(エンティティにマップすることは可能です)。非エンティティpojoを使用する方法については、https://stackoverflow.com/questions/42419305/spring-data-jpa-getting-no-aliases-found-in-result-tuple-error-executing/42419939#42419939を参照してください。あなたのJPAリポジトリに –

    関連する問題