sql >> データベース >  >> RDS >> Mysql

中規模および大規模の結果セットでのHibernate、JDBC、およびJavaのパフォーマンス

    次のような単純なクエリでスモークテストを実行できますか?

    SELECT current_timestamp()
    

    または

    SELECT 1 + 1
    

    これにより、実際のJDBCドライバーのオーバーヘッドがわかります。また、両方のテストが同じマシンから実行されているかどうかも明確ではありません。

    同じクエリをJavaで数千回実行します。 JVMはウォームアップ(クラスローディング、JIT)するのに少し時間が必要です。また、SimpleJDBC.getConnection()を想定しています C3P0接続プールを使用します-接続を確立するコストがかなり高いため、最初の数回の実行が遅くなる可能性があります。

    また、アドホッククエリや条件クエリよりも名前付きクエリを優先します。

    Hibernateは非常に複雑なフレームワークです。ご覧のとおり、生のJDBCと比較して全体の実行時間の75%を消費します。生のORM(遅延読み込み、ダーティチェック、高度なキャッシュなし)が必要な場合は、mybatis を検討してください。 。または、 JdbcTemplate RowMapper 抽象化。

    あまり。 第19章を確認してください。パフォーマンスの向上 Hibernateドキュメントで。 たくさんあります そこに起こっている反射の+クラスの生成。繰り返しになりますが、データベースから1ミリ秒ごとにスクイーズする場合、Hibernateは最適なソリューションではない可能性があります。

    ただし 広範なキャッシュサポートにより、全体的なユーザーエクスペリエンスを向上させたい場合に適しています。 パフォーマンスを確認してください もう一度ドキュメント。それは主にキャッシングについて話します。第1レベルのキャッシュ、第2レベルのキャッシュ、クエリキャッシュがあります...これは、Hibernateが実際に単純なJDBCよりも優れている可能性がある場所です。想像もできない方法で多くのキャッシュを実行できます。一方、キャッシュ構成が不十分だと、セットアップがさらに遅くなります。

    チェックアウト: Hibernate + Springでのキャッシュ-いくつかの質問!

    JVM(特にサーバー) 構成)は非常に高速です。ヒープ上でのオブジェクトの作成は、スタック上でのオブジェクト作成と同じくらい高速です。 C、ガベージコレクションが大幅に最適化されました。プレーンJDBCを実行しているJavaバージョンは、よりネイティブな接続に比べてはるかに遅いとは思いません。そのため、ベンチマークでいくつかの改善を提案しました。

    パフォーマンスが最大の問題である場合は、JDBCが適切な選択であると思います。 Javaは、データベースを多用する多くのアプリケーションで正常に使用されています。




    1. SQLでの順序付けされていない結果

    2. SQLServerでのカスタムの日付/時刻の書式設定

    3. MySQL .. INSERT ... ON DUPLICATE KEY SELECTはありますか?

    4. テーブルとインデックスとHDDおよびSSD