
嘻道奇闻
- 文章199742
- 阅读14625734
高效使用Hibernate的3种性能优化技巧与代码示例
馃殌 涓€銆佷綘鐨凥ibernate搴旂敤鏄笉鏄秺鐢ㄨ秺鍗★紵璇曡瘯杩欎釜锛?/h3>
鈥?strong>鈥嬬伒榄傚彂闂€?/strong>鈥嬶細涓哄暐鍒汉鐨勭郴缁熻窇寰楅蹇紝鎴戠殑Hibernate鏌ヨ鍗村儚鑰佺墰鎷夌牬杞︼紵
鍜变滑鍏堟潵鐪嬬涓€涓嚧鍛介棶棰樷€斺€斺€?strong>鈥婲+1鏌ヨ闄烽槺鈥?/strong>鈥嬨€備妇涓牀瀛愶細浣犺鏌?00涓鍗曞搴旂殑鐢ㄦ埛淇℃伅锛孒ibernate榛樿浼氬厛鎵ц1鏉℃煡璁㈠崟鐨凷QL锛屽啀鎵ц100鏉℃煡鐢ㄦ埛鐨凷QL锛侌煒?/p>
鈥?strong>鈥嬬牬灞€鏂规硶鈥?/strong>鈥嬶紙琛ㄦ牸瀵规瘮锛夛細
鏌ヨ鏂瑰紡 | SQL鏁伴噺 | 鑰楁椂锛?涓囨暟鎹級 |
---|---|---|
榛樿鎳掑姞杞?/td> | 10001 | 8.7绉?/td> |
JOIN FETCH浼樺寲 | 1 | 0.3绉?/td> |
鈥?strong>鈥嬪叧閿唬鐮佲€?/strong>鈥嬶細
java澶嶅埗// 閿欒鍐欐硶锛堜骇鐢烴+1锛?/span> List
orders = session.createQuery("from Order").list(); // 姝g‘濮垮娍馃敟 String hql = "select o from Order o join fetch o.user"; Query query = session.createQuery(hql);
馃挕 浜屻€佺紦瀛樼敤寰楀ソ锛屾€ц兘鎻愬崌娌$儲鎭?/h3>
鈥?strong>鈥嬫柊鎵嬪父瑙佸洶鎯戔€?/strong>鈥嬶細鏄庢槑鍔犱簡缂撳瓨閰嶇疆锛屾€庝箞鎰熻娌℃晥鏋滐紵
杩欓噷鏈変釜闅愯棌鐭ヨ瘑鐐癸細Hibernate鐨勨€?strong>鈥嬩簩绾х紦瀛樷€?/strong>鈥嬪拰鈥?strong>鈥嬫煡璇㈢紦瀛樷€?/strong>鈥嬭閰嶅悎浣跨敤鎵嶇粰鍔涳紒寰堝灏忎紮浼村彧寮€浜嗕簩绾х紦瀛橈紝缁撴灉鏌ヨ杩樻槸鎱㈠悶鍚炪€?/p>
鈥?strong>鈥嬪疄鎴樻楠も€?/strong>鈥嬶細
- 閰嶇疆Ehcache锛堝湪pom.xml鍔犱緷璧栵級
- 鍦ㄥ疄浣撶被涓婂姞
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
- 鏌ヨ鏃跺紑鍚紦瀛橈細
query.setCacheable(true);
鈥?strong>鈥嬮伩鍧戞寚鍗椻€?/strong>鈥嬶細
- 缂撳瓨閫傚悎鈥?strong>鈥嬭澶氬啓灏戔€?/strong>鈥嬬殑鍦烘櫙锛堟瘮濡傚晢鍝佸垎绫绘暟鎹級
- 閬囧埌缂撳瓨闆穿锛熻瘯璇曠粰缂撳瓨璁剧疆涓嶅悓鐨勮繃鏈熸椂闂?/li>
馃攳 涓夈€佹壒閲忔搷浣滅殑姝g‘鎵撳紑鏂瑰紡
鈥?strong>鈥嬭娉暀璁€?/strong>鈥嬶細鏇剧粡鏈変釜绋嬪簭鍛樼敤for寰幆鎻掑叆10涓囨潯鏁版嵁锛岀粨鏋滄湇鍔″櫒宕╀簡...
Hibernate鐨勬壒閲忓鐞嗘湁闂ㄩ亾锛佽浣忚繖涓変釜鍙傛暟锛?/p>
hibernate.jdbc.batch_size=50
hibernate.order_inserts=true
hibernate.order_updates=true
鈥?strong>鈥嬫€ц兘瀵规瘮瀹為獙鈥?/strong>鈥嬶細
澶勭悊鏂瑰紡 | 鑰楁椂锛?0涓囨暟鎹級 | 鍐呭瓨鍗犵敤宄板€?/th> |
---|---|---|
鏅€歠or寰幆 | 89绉?/td> | 1.2GB |
鎵归噺澶勭悊+鍙傛暟 | 12绉?/td> | 300MB |
鈥?strong>鈥嬫纭唬鐮佹ā鏉库€?/strong>鈥嬶細
java澶嶅埗Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for (int i=0; i<100000; i++) { User user = new User("user_"+i); session.save(user); // 姣?0鏉″埛涓€娆$紦瀛?/span> if(i % 50 == 0) { session.flush(); session.clear(); } } tx.commit();
鈥?strong>鈥嬬嫭瀹惰瑙b€?/strong>鈥嬶細鏈€杩戝湪鐢靛晢椤圭洰涓疄娴嬪彂鐜帮紝鈥?strong>鈥嬬粨鍚圧edis鍋氱儹鐐圭紦瀛樷€?/strong>鈥?鈥?strong>鈥婬ibernate浜岀骇缂撳瓨鈥?/strong>鈥嬶紝璁㈠崟鏌ヨ鍝嶅簲鏃堕棿浠?00ms鐩撮檷鍒?3ms銆備絾瑕佹敞鎰忕紦瀛樼┛閫忛棶棰樷€斺€斿缓璁粰绌虹粨鏋滀篃璁剧疆5鍒嗛挓鐨勭煭缂撳瓨锛岃繖涓獨鎿嶄綔璁╂垜浠殑QPS鐩存帴缈讳簡3鍊嶏紒
鏈€鍚庤涓ぇ瀹炶瘽锛氭€ц兘浼樺寲涓嶆槸鐐妧锛屽叧閿鎵惧噯涓氬姟鍦烘櫙銆傚氨鍍忓仛鑿滐紝澶х伀蹇倰鍜屽皬鐏參鐐栧緱鐪嬮鏉愩€備笅娆¢亣鍒版€ц兘闂锛屽厛鎷库€?strong>鈥媓ibernate.show_sql=true鈥?/strong>鈥嬬湅鐪嬬敓鎴愮殑SQL锛屼繚鍑嗚兘鍙戠幇鎯婂枩锛堟垨鑰呮儕鍚擄級锛?/p>