目次
1.接続プーリングを使用します
2。準備した状態を使用し、文字列の連結を避けます
3.必要なもののみを取得します
4。バルクデータのバッチ操作
5. ORMツールを賢くレバレッジ(例えば、冬眠)
6.トランザクションを最適化します
7。クエリを監視および調整します
8。読み取りレプリカを使用して、重い読み取りワークロードに
ホームページ Java &#&チュートリアル Javaアプリケーションでのデータベースインタラクションを最適化します

Javaアプリケーションでのデータベースインタラクションを最適化します

Jul 27, 2025 am 02:32 AM
java データベース

HikaricPを使用して接続プーリングを使用して、データベース接続を再利用し、オーバーヘッドを減らします。 2。準備した状態を使用して、SQL注入を防ぎ、クエリのパフォーマンスを改善します。 3.特定の列を選択し、フィルターとページネーションを適用することにより、必要なデータのみを取得します。 4.複数のレコードを挿入または更新するときに、バッチ操作を使用して往復を減らします。 5. n 1クエリを避け、キャッシュを有効にし、怠zyな負荷とDTO投影を使用することにより、冬眠などのORMツールを賢く使用します。 6.トランザクションを短くし、トランザクション内の外部通話を回避して、ロックを減らします。 7.ロギングでクエリを監視し、計画を説明し、適切なインデックスを追加します。 8。読み取りレプリカを使用して読み取りクエリをオフロードし、重い読み取り荷重の下でスケーラビリティを向上させます。

Javaアプリケーションでのデータベースインタラクションを最適化します

データベースに依存するJavaアプリケーションを構築する場合、パフォーマンスと信頼性は、データベースとの相互作用に大きく依存します。最適化されていないデータベース操作は、応答時間の遅い、リソースの疲労、およびスケーラビリティの問題につながる可能性があります。典型的なJavaアプリケーションでデータベースの相互作用を最適化する方法は次のとおりです。

Javaアプリケーションでのデータベースインタラクションを最適化します

1.接続プーリングを使用します

操作ごとに新しいデータベース接続を開くことは高価です。代わりに、接続プールを介して既存の接続を再利用します。

なぜそれが重要なのか:

Javaアプリケーションでのデータベースインタラクションを最適化します
  • 接続を確立するには、ネットワークの握手と認証が含まれます。
  • HikaricPApache DBCPC3P0などのプールは、再利用可能な接続セットを管理します。

ベストプラクティス:

  • Hikaricp (最速で広く採用されている)を使用します。
  • ワークロードに基づいてプールサイズを構成します(中程度のアプリの場合は10〜20など)。
  • リソースの問題を回避するために、タイムアウトとリーク検出を設定します。
 hikariconfig config = new hikariconfig();
config.setjdbcurl( "jdbc:mysql:// localhost:3306/mydb");
config.setUsername( "user");
config.setPassWord( "pass");
config.setmaximumpoolsize(15);
hikaridatasource dataSource = new HikaridataSource(config);

2。準備した状態を使用し、文字列の連結を避けます

文字列連結を介して構築された動的クエリは、SQLインジェクションに対して脆弱であり、データベースによってキャッシュされていません。

Javaアプリケーションでのデータベースインタラクションを最適化します

PreparedStatementを使用してください:

  • プリコンパイルされたSQLはパフォーマンスを向上させます。
  • SQL注入を防ぎます。
  • パラメータープレースホルダー( ? )をサポートします。
 string sql = "select * from user where age>?";
try(preatedStatement stmt = connection.preparestatement(sql)){
    stmt.setint(1、25);
    結果rs = stmt.executequery();
    //結果を処理します
}

ボーナス:同じクエリを複数回実行するときに準備されたステートメントを再利用します。


3.必要なもののみを取得します

SELECT *避け、不要な列または行を取得します。

クエリの最適化:

  • 必要な列のみを選択します。
  • 大規模なデータセットには、 LIMITまたはページネーション( OFFSETFETCH NEXT )を使用します。
  • クエリの早い段階でフィルターを適用します。
 -  悪い
select * fromユーザー。

 -  良い
Active = 1 Limit 100を使用するユーザーからid、name、emailを選択します。

Javaでは、 JDBC RowMapperJPAJOOQなどのツールを使用して、MAPの結果が効率的に結果をもたらします。


4。バルクデータのバッチ操作

多くのレコードを1つずつ挿入または更新すると、往復のオーバーヘッドが発生します。

バッチ処理を使用します:

  • 複数の操作を単一のバッチにグループ化します。
  • ネットワークラウンド旅行を減らします。
 string sql = "logs(message、created_at)values(?、?)"に挿入挿入(メッセージ、created_at) ";
try(preatedStatement stmt = connection.preparestatement(sql)){
    for(logentryエントリ:エントリ){
        stmt.setString(1、entry.getMessage());
        stmt.settimestamp(2、entry.getTimestamp());
        stmt.addbatch(); //バッチに追加します
    }
    stmt.executeBatch(); //すべてを一度に実行します
}

注:メモリとパフォーマンスのバランスをとるために、バッチサイズ(50〜100など)をチューン化します。


5. ORMツールを賢くレバレッジ(例えば、冬眠)

HibernateのようなOMSは、データベースの相互作用を簡素化しますが、悪用された場合はパフォーマンスを損なう可能性があります。

最適化のヒント:

  • n 1クエリの問題を避けてください( JOIN FETCHまたは@EntityGraphに参加してください)。
  • 頻繁に読み取られるデータのセカンドレベルのキャッシュを有効にします。
  • 怠zyなロードを適切に使用します。必要でない限り、大きな関連性をロードしないでください。
  • 少数のフィールドのみが必要な場合は、完全なエンティティの代わりにDTOプロジェクションを使用することを検討してください。
 // n 1を防止します
@query( "ユーザーuからuにuに参加するu.active = true")
List <User> FindActiveUsersWithProfiles();

6.トランザクションを最適化します

長期にわたるトランザクションはリソースをロックし、並行性を削減します。

ベストプラクティス:

  • トランザクションをできるだけ短くしてください。
  • 適切な伝播レベルと分離レベルで@Transactional (春に)を使用します。
  • トランザクション内のユーザー入力または外部呼び出しは避けてください。
 @サービス
@transactional
パブリッククラスユーザーサービス{
    public void updateuserprofile(long id、string email){
        ユーザーユーザー= ueserrepository.findbyid(id);
        user.setemail(email);
        USERREPOSITORY.SAVE(ユーザー); // auto-committed
    }
}

7。クエリを監視および調整します

よく書かれたコードでさえ、インデックスの欠落や実行計画の不足により、遅いクエリに苦しむ可能性があります。

何をするか:

  • データベースクエリのロギングを有効にします(たとえば、MySQLでlog slow queries )。
  • 説明などのツールを使用して、クエリ計画を分析します。
  • 頻繁にクエリされた列にインデックスを追加します(ただし、あまり多くありません。インデックスメンテナンスにはコストがかかります)。

例:

 select * fromユーザーからemail = &#39;user@example.com&#39;;

8。読み取りレプリカを使用して、重い読み取りワークロードに

アプリに重度の読み取りトラフィックがある場合、オフロードはレプリカを読むためにクエリを選択します。

どうやって:

  • 複数のデータソースを構成します(読み取りと書き込み)。
  • Replicasへのルート読み取り操作は、プライマリに書き込みます。

春には、 AbstractroutingDataSourceを使用してデータソースを切り替えることができます。


Javaでのデータベースインタラクションの最適化は、高速コードを作成するだけではありません。スマートリソース管理、安全なプラクティス、アプリケーションとデータベースがどのように連携するかを理解することです。接続プーリング、適切なクエリ設計、バッチ、およびORMチューニングを使用すると、パフォーマンスとスケーラビリティを大幅に向上させることができます。

基本的に、速く進み、安全を保ち、データベースが実際に行っていることに注意してください。

以上がJavaアプリケーションでのデータベースインタラクションを最適化しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

JavaのClassPathにJARファイルを追加する方法は? JavaのClassPathにJARファイルを追加する方法は? Sep 21, 2025 am 05:09 AM

-CPパラメーターを使用してJARをClassPathに追加して、JVMがjava-cplibrary.jarcom.example.mainなどの内部クラスとリソースをロードできるようにします。

Javaでファイルを作成する方法 Javaでファイルを作成する方法 Sep 21, 2025 am 03:54 AM

usefile.createNewfile()tocreatefileonlyifitdoes notexist、avolididingoverwriting;

なぜリアルタイムシステムが決定論的応答を保証する必要があるのですか? なぜリアルタイムシステムが決定論的応答を保証する必要があるのですか? Sep 22, 2025 pm 04:03 PM

リアルタイムシステムには、正確性が結果配信時間に依存するため、決定論的応答が必要です。ハードリアルタイムシステムには厳格な締め切りが必要であり、逃したことは災害につながりますが、ソフトリアルタイムは時折遅延を可能にします。スケジューリング、割り込み、キャッシュ、メモリ管理などの非決定的要因はタイミングに影響します。建設計画には、RTOの選択、WCET分析、リソース管理、ハードウェアの最適化、厳密なテストが含まれます。

UC Browser_uc Browserの強制スケーリングWebページでWebページを強制する方法UCブラウザーによるスケーリングWebページ UC Browser_uc Browserの強制スケーリングWebページでWebページを強制する方法UCブラウザーによるスケーリングWebページ Sep 24, 2025 pm 04:54 PM

まず、UCブラウザの組み込みスケーリング関数を有効にし、設定→[設定]→[フォントと版画]またはページスケーリングを参照し、プリセット比またはカスタムパーセンテージを選択します。第二に、2本の指でジェスチャーを開いたりピンチしたりすることにより、ページディスプレイサイズを強制することができます。スケーリングを制限するWebページの場合、Webサイトのデスクトップバージョンに制限のロックを解除することを要求できます。上級ユーザーは、アドレスバーでJavaScriptコードを実行して、より柔軟な強制スケーリング効果を実現することにより、ViewPort属性を変更することもできます。

Javaで呼び出しメソッドの名前を取得する方法は? Javaで呼び出しメソッドの名前を取得する方法は? Sep 24, 2025 am 06:41 AM

答えは、thread.currentthread()。getStackTrace()を使用してコールメソッド名を取得し、インデックス2から別のコールのソモメトッド名を取得することです。インデックス0はgetStackTraceであるため、1は現在のメソッドであり、2は発信者であり、2は例です。 インパクト。

Microsoft Edge High CPU使用 Microsoft Edge High CPU使用 Sep 24, 2025 am 12:17 AM

Edgeは、Chromium Kernelに基づいたリソースの消費量が多いため、マルチタブページ、プラグインランニング、Webサイトスクリプト、レンダリングメカニズムなどの要因のために、高いCPUを占有します。ソリューションには以下が含まれます。1。バックグラウンドの負担を軽減するための不要な拡張機能を閉じます。 2.「スリープタグ」関数を有効にして、アイドルタグリソースの使用を削減します。 3.バックグラウンドプロセスをクリーンアップし、関連する設定をレンダリングするGPUを閉じます。 4.ブラウザとシステムを更新して、互換性とパフォーマンスの最適化を確保します。

Javaの例外をどのように処理しますか? Javaの例外をどのように処理しますか? Sep 23, 2025 am 04:44 AM

Java例外処理トライキャッチブロックを介して例外をキャッチし、最後にブロックはリソースのクリーンアップを保証し、リソースでリソースを自動的に管理し、宣言の例外をスローし、特定の例外を扱うカスタム例外をスローし、例外を無視するのではなく、空の漁獲ブロックを避けるなどのベストプラクティスに従います。

Javaのnullpointerexceptionを避けるためにオプションのクラスを使用する方法は? Javaのnullpointerexceptionを避けるためにオプションのクラスを使用する方法は? Sep 25, 2025 am 06:04 AM

オプションのクラスは、nullポインターの例外を避けるために、nullの値を安全に処理するために使用されます。 1. null値を処理するためにoptional.ofnullableを使用してインスタンスを作成します。 2。例外を引き起こすための直接の呼び出しを避けるために、ISPResentまたはIfpresentセキュリティを介して値を確認してアクセスします。 3. orelseとorelsegetを使用してデフォルト値を提供するか、Orelsethrowを使用してカスタム例外をスローします。 4.マップおよびフィルターチェーンの操作を介して値を変換またはフィルタリングして、コードの読みやすさと堅牢性を向上させます。

See all articles