sql >> Databáze >  >> RDS >> Mysql

Hibernace, výkon JDBC a Java na střední a velké sadě výsledků

Můžete provést kouřový test pomocí jednoduchého dotazu, jako je:

SELECT current_timestamp()

nebo

SELECT 1 + 1

To vám řekne, jaká je skutečná režie ovladače JDBC. Také není jasné, zda jsou oba testy prováděny ze stejného stroje.

Spusťte stejný dotaz několikrát v Javě. JVM potřebuje nějaký čas na zahřátí (načítání třídy, JIT). Také předpokládám SimpleJDBC.getConnection() používá sdružování připojení C3P0 – náklady na vytvoření připojení jsou poměrně vysoké, takže několik prvních spuštění může být pomalé.

Také preferujte pojmenované dotazy před ad-hoc dotazováním nebo dotazem na kritéria.

Hibernate je velmi složitý rámec. Jak můžete vidět, spotřebovává 75 % celkového času provádění ve srovnání s nezpracovaným JDBC. Pokud potřebujete nezpracovaný ORM (žádné líné načítání, špinavá kontrola, pokročilé ukládání do mezipaměti), zvažte mybatis . Nebo možná dokonce JdbcTemplate s RowMapper abstrakce.

Spíš ne. Podívejte se na Kapitola 19. Zlepšení výkonu v dokumentaci Hibernate. Je toho hodně reflexe odehrávající se tam venku + třídní generace. Ještě jednou, Hibernate nemusí být nejlepším řešením, když chcete z databáze vymáčknout každou milisekundu.

Nicméně je to dobrá volba, když chcete zvýšit celkovou uživatelskou zkušenost díky rozsáhlé podpoře ukládání do mezipaměti. Podívejte se na výkon znovu doc. Většinou se mluví o ukládání do mezipaměti. Existuje mezipaměť první úrovně, mezipaměť druhé úrovně, mezipaměť dotazů... Toto je místo, kde může Hibernate ve skutečnosti překonat jednoduché JDBC – dokáže ukládat mnoho do mezipaměti způsoby, které byste si ani nedokázali představit. Na druhou stranu – špatná konfigurace mezipaměti by vedla k ještě pomalejšímu nastavení.

Podívejte se na:Ukládání do mezipaměti pomocí Hibernate + Spring – několik otázek!

JVM (zejména na serveru konfigurace) je poměrně rychlý. Vytváření objektů na hromadě je stejně rychlé jako na hromadě např. C, svoz odpadu byl výrazně optimalizován. Nemyslím si, že verze Java běžící na prostém JDBC by byla mnohem pomalejší ve srovnání s nativním připojením. Proto jsem navrhl několik vylepšení vašeho benchmarku.

Věřím, že JDBC je dobrá volba, pokud je vaším největším problémem výkon. Java byla úspěšně použita v mnoha databázových aplikacích.




  1. SQL Server 2008 Časová razítka vložení a aktualizace řádků

  2. Jak implementovat priority v SQL (postgres)

  3. MySQL GROUP BY a vyplnit prázdné řádky

  4. PostgreSQL POPISUJTE TABULKU