• 招生咨詢(xún)熱線:4008-569-579 
  • 手機(jī)版
    用手機(jī)掃描二維碼直達(dá)商品手機(jī)版
招生咨詢(xún)熱線
4008-569-579
機(jī)構(gòu)主頁(yè) > 培訓(xùn)資料 > Java培訓(xùn):Java中的性能反模式 N+1問(wèn)題
機(jī)構(gòu)主頁(yè) > 培訓(xùn)資料>Java培訓(xùn):Java中的性能反模式 N+1問(wèn)題

Java培訓(xùn):Java中的性能反模式 N+1問(wèn)題

來(lái)源:廣州達(dá)內(nèi)教育        時(shí)間:2023-05-30        熱度:138℃        返回列表

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

N+1

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


  在本文中,我們將探討 N+1 問(wèn)題、Java 中 N+1 問(wèn)題背后的常見(jiàn)原因。


  Java 中的性能反模式


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


  我們今天看到的反模式稱(chēng)為 N+1 問(wèn)題。它以對(duì)數(shù)據(jù)庫(kù)的一系列過(guò)度請(qǐng)求為標(biāo)志,并經(jīng)常伴隨對(duì)象關(guān)系映射 (ORM)

工具。


  什么是 N+1 問(wèn)題?


  N+1 問(wèn)題,也稱(chēng)為 N+1 選擇問(wèn)題或 N+1 查詢(xún),發(fā)生在服務(wù)從數(shù)據(jù)庫(kù)請(qǐng)求多行 (N)

數(shù)據(jù),然后單獨(dú)請(qǐng)求這些項(xiàng)目的相關(guān)數(shù)據(jù) N 次時(shí)。


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

方法從數(shù)據(jù)庫(kù)中請(qǐng)求 24 行,然后循環(huán)并通過(guò)單獨(dú)的查詢(xún)從數(shù)據(jù)庫(kù)中請(qǐng)求 24 行。


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

當(dāng)然,這些單獨(dú)的行調(diào)用可以通過(guò)單個(gè)調(diào)用來(lái)完成。在java培訓(xùn)中,培訓(xùn)課程不僅注重理論,更注重項(xiàng)目的實(shí)戰(zhàn)能力,能夠讓你快速適應(yīng)企業(yè)開(kāi)發(fā)的進(jìn)度,成為企業(yè)所需要的Java人才。




  是什么導(dǎo)致 Java 應(yīng)用程序中的 N+1 問(wèn)題?


  有一些常見(jiàn)的罪魁禍?zhǔn)?,它們通常與 ORM 工具或框架以及它們生成查詢(xún)的方式有關(guān)。


  1. ORM 框架


  像 Java 這樣的面向?qū)ο笳Z(yǔ)言通常需要使用關(guān)系數(shù)據(jù)庫(kù)。這要么意味著開(kāi)發(fā)人員或數(shù)據(jù)庫(kù)管理員需要編寫(xiě)(優(yōu)化)SQL

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

查詢(xún))方面享有盛譽(yù)。


  2. 延遲加載


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

FetchType.LAZY。而且,由于這些查詢(xún)沒(méi)有保持會(huì)話,因此每次請(qǐng)求服務(wù)需要時(shí),都會(huì)對(duì)該數(shù)據(jù)庫(kù)進(jìn)行 N+1 次查詢(xún)。


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


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

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

電話咨詢(xún)

電話咨詢(xún)

咨詢(xún)電話:
4008-569-579
回到頂部

回到頂部