@mikaduki-mikann

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

spring boot jpa vs sql バッチ処理について

人間の性質について保存してるテーブルがあるとします
その元テーブルのテーブルのカラムには人間の色テーブルがあります
青い人とそれ以外の人で分けて青い人は青い人テーブルそれ以外の人はそれ以外の人テーブルに入れる処理がしたいです。
この時にspring boot とjpaを使って一回で元のテーブルをスキャンしてif文でデータを切り分けて青い人テーブルそれ以外の人テーブルに分けるのと二回のスキャンでselect insert の構文でデータの検証、挿入を行う処理はどっちの方が早い、重くない処理になりますか?

0 likes

spring boot jpa vs sql バッチ処理について

この時にspring boot とjpaを使って一回で元のテーブルをスキャンしてif文でデータを切り分けて青い人テーブルそれ以外の人テーブルに分けるのと二回のスキャンでselect insert の構文でデータの検証、挿入を行う処理はどっちの方が早い、重くない処理になりますか?

質問文の意味が分かりませんが、想像を膨らませると・・・

以下のような構成で、アプリと MySQL 間で何回かのラウンドトリップを行って複数回の SQL 文を実行するのと、

アプリ ⇔ プロバイダ/ドライバ ⇔ インターネット/イントラネット ⇔ MySQL

以下の記事ように MySQL をバッチモードで実行するのとでは「どっちの方が早い、重くない」ということを言っているのではなかろうかと思えます。

バッチモードでの MySQL の使用
https://dev.mysql.com/doc/refman/8.0/ja/batch-mode.html

上の想像は当たっていますか?

当たっていれば、ここで聞くまでもない話だと思いますので、ハズレですかね? ハズレならどこがどう違うか具体的に書いてください。

0Like

あなたの質問の意味が明確ではありませんが、私が解釈した通りにお答えします。
私が解釈した質問の意味:
aテーブルにあるデータを特定の条件(カラム)に従ってb、cテーブルにそれぞれ分類して挿入しようとしています。最もシステムに負担が少なく、迅速な方法。

  1. データ量が非常に非常に非常に小さい場合(手作業でも問題ないほど小さい場合)
    単純にアプリケーション(Springで)でif文を使って分岐させても問題ないと思います。
    (このような場合、JPAの抽象化レイヤーと分類作業でCPUやメモリの使用量が増える可能性があるので、非常に非常に非常に(強調!)小さい場合にのみ適用するのが良いです。
    データが少しでも多い場合、アプリケーションメモリにデータを載せるため、メモリエラーが発生する可能性があります。
    また、インサート処理が非常に遅くなるでしょう。saveAll()を使っても、単一トランザクションで処理する場合、パフォーマンスが低下するため、Hibernateのオプションを調整するか、トランザクション管理を行うか、手動で永続性を管理する必要があり、この部分も問題になります。(個人的には最悪の方法だと思います。)

  2. MySQL(RDBMS)でクエリを使用して処理
    この方法が該当の質問に対して最も効率的な答えだと思います。性能や実装コストを考慮したとき、この方法をお勧めします。
    MySQLでもバッチ作業のトランザクション管理が可能なので、そのアプローチ方法は上のコメントを参考にすると良いと思います。
    もしこのような簡単な作業であっても、値が多すぎる場合は、パーティショニング、チャンク単位のバッチ処理などを調べてみると役立つかもしれません。

  3. Spring Batchの使用
    追加のビジネスロジックが必要な場合(追加のデータ変換や検証が必要な場合)、DBに依存したくない場合(複数のDBに簡単に移行したい場合)、または整合性が非常に重要な場合(失敗したバッチの再開、トランザクション管理)。他のDBに移行するなどの追加要件がある場合のみお勧めします。
    質問者様の質問は単純なクエリのようで、これらの条件がなかったため、推奨しません。
    結論: MySQLでクエリを使って作業するのが最も効果的だと思います。

  • 私は韓国人で、翻訳機を使ってこの回答を作成しました。
    タメ口や誤字、文法的に合わない単語や用語があるかもしれませんが、ご容赦ください。
    大目に見てください。
1Like

Your answer might help someone💌