• 招生咨詢熱線:4008-569-579 
  • 手機版
    用手機掃描二維碼直達商品手機版
招生咨詢熱線
4008-569-579
機構主頁 > 培訓資料 > Java培訓:Java中的性能反模式 N+1問題
機構主頁 > 培訓資料>Java培訓:Java中的性能反模式 N+1問題

Java培訓:Java中的性能反模式 N+1問題

來源:廣州達內(nèi)教育        時間:2023-05-30        熱度:23℃        返回列表

  隨著應用程序(以及用于構建它們的工具)變得越來越復雜,并且數(shù)據(jù)需求變得越來越大,開發(fā)團隊開發(fā)出能夠在基線和規(guī)模上高效執(zhí)行的應用程序至關重要。但是實現(xiàn)這個目標有很多障礙:像

N+1

問題這樣的性能反模式可能會減慢或破壞最好的應用程序。想對性能反模式有更深入的了解,可以參加java培訓,在專業(yè)老師的指導下,你可以很快掌握性能反模式的更多特性。


  在本文中,我們將探討 N+1 問題、Java 中 N+1 問題背后的常見原因。


  Java 中的性能反模式


  性能反模式通常圍繞著在負載或規(guī)模上復合的低效或多余查詢。出現(xiàn)這些模式的原因多種多樣,但最終結果可能從性能差到級聯(lián)故障。


  我們今天看到的反模式稱為 N+1 問題。它以對數(shù)據(jù)庫的一系列過度請求為標志,并經(jīng)常伴隨對象關系映射 (ORM)

工具。


  什么是 N+1 問題?


  N+1 問題,也稱為 N+1 選擇問題或 N+1 查詢,發(fā)生在服務從數(shù)據(jù)庫請求多行 (N)

數(shù)據(jù),然后單獨請求這些項目的相關數(shù)據(jù) N 次時。


  在下面分布式 Spring PetClinic 演示應用程序的示例中,我們看到 vet.specialties

方法從數(shù)據(jù)庫中請求 24 行,然后循環(huán)并通過單獨的查詢從數(shù)據(jù)庫中請求 24 行。


  那是 24 次調(diào)用,加上對數(shù)據(jù)庫本身的 24 行數(shù)據(jù)的初始調(diào)用——或者,簡而言之,N + 1 次調(diào)用。

當然,這些單獨的行調(diào)用可以通過單個調(diào)用來完成。在java培訓中,培訓課程不僅注重理論,更注重項目的實戰(zhàn)能力,能夠讓你快速適應企業(yè)開發(fā)的進度,成為企業(yè)所需要的Java人才。




  是什么導致 Java 應用程序中的 N+1 問題?


  有一些常見的罪魁禍首,它們通常與 ORM 工具或框架以及它們生成查詢的方式有關。


  1. ORM 框架


  像 Java 這樣的面向對象語言通常需要使用關系數(shù)據(jù)庫。這要么意味著開發(fā)人員或數(shù)據(jù)庫管理員需要編寫(優(yōu)化)SQL

請求,要么他們需要使用中間層,如 ORM 框架,為該數(shù)據(jù)庫生成兼容的請求。雖然功能強大,但 ORM 框架在創(chuàng)建未優(yōu)化查詢(包括 N+1

查詢)方面享有盛譽。


  2. 延遲加載


  默認情況下,像 Hibernate 這樣的 ORM 框架可以在其生成的數(shù)據(jù)庫請求中使用

FetchType.LAZY。而且,由于這些查詢沒有保持會話,因此每次請求服務需要時,都會對該數(shù)據(jù)庫進行 N+1 次查詢。


  3. 開發(fā)人員和數(shù)據(jù)庫管理員


  事實是,這些 ORM 框架雖然很方便,但無法取代開發(fā)人員或數(shù)據(jù)庫管理員自己編寫請求的誠實努力。而且,由于 ORM

工具在開發(fā)人員沒有太多監(jiān)督的情況下生成查詢(除了功能),因此開發(fā)人員在生產(chǎn)中出現(xiàn)之前不會看到這個問題。參加以實戰(zhàn)項目為主要教學方法的Java培訓,可以有效地縮短同企業(yè)具體用人需求之間的差距,快速提升自己。

電話咨詢

電話咨詢

咨詢電話:
4008-569-579
回到頂部

回到頂部