JBoss AS 7類加載說明

這是示例章節,摘自Francesco Marchioni編輯的JBoss AS 7 Configuration Deployment and Administration一書,該書正在運行一個名為mastertheboss.com的JBoss門戶。

根據Java EE規范的要求,理想情況下,應用程序服務器應為其部署的應用程序提供使用任何實用程序庫和任何版本的自由,而不必考慮要使用同一庫的并發應用程序的存在。

這也稱為名稱空間隔離(Java EE 5規范,EE.8.4節)。 但是,從不同名稱空間加載類可能會引起一些不易解決的問題:例如,如果我在應用程序中打包了新版本的實用程序庫,而應用程序加載了同一個庫的舊版本,將會發生什么情況?服務器? 或者,如何在應用程序服務器的同一實例中同時使用同一實用程序庫的兩個不同版本? 多年來,JBoss AS類加載策略已經發生了明智的變化:基本上,應用服務器的4.x版本使用UnifiedClassLoader ,其目的是減少運行的應用程序之間的通信開銷,因為類數據可以通過引用或簡單副本共享。

使用UnifiedClassLoader無法解決的主要未解決問題之一是類加載依賴項。 這樣的想法是,如果一個應用程序(A)使用另一個應用程序(B)的類,則系統應該知道在重新部署B時重新部署A,否則它將引用陳舊的類。 實際上,有兩種嘗試來使這項工作有效,而無需用戶進行任何配置。 兩種嘗試均未真正奏效,并且均被放棄。 自從JBoss AS 5.0引入以來,基于新的虛擬文件系統(VFS)的新類加載器。 實施VFS是為了簡化和統一應用程序服務器中的文件處理。 新的類加載器名為VFS類加載器,它使用VFS查找JAR和類文件。 即使這表示在JBoss AS 5.0中如何加載類,也發生了重大變化,但是所產生的行為與JBoss AS以前的版本非常相似。

錯誤的常見來源是在部署中包括由容器提供的API類。 這會導致創建該類的多個版本,并且部署無法正確部署。 AS7中的類加載標志著與以前的嘗試大相??徑庭。 現在,類加載基于JBoss模塊項目,并且所部署的任何應用程序實際上都是模塊。 肯定的讀者會提出一些疑問:分配給已部署應用程序的模塊名稱是什么? 而且,AS如何處理模塊之間的依賴關系? 讓我們在單獨的部分中回答每個問題:

了解模塊名稱

了解模塊名稱不是學術活動。 實際上,我們可以在模塊之間建立依賴關系,因此在許多情況下,需要知道分配給應用程序的模塊名稱是哪一個。 因此,打包為頂級歸檔文件(例如WAR,JAR和SAR)的應用程序將獲得以下模塊名稱:

deployment.[archive name]

例如,將部署一個名為WebExample1.war的Web應用程序作為模塊名稱:

deployment.WebExample1.war

另一方面,在包含嵌套模塊的應用程序(例如EAR歸檔文件)上,將使用以下分類為每個單個歸檔文件分配模塊名稱:

deployment.[ear archive name].[sub deployment archive name]

因此,如果將相同的Web應用程序包含在存檔EnterpriseApp.ear中 ,則將使用以下名稱進行部署:

deployment.EnterpriseApp.ear.WebExample1.war

查找隔離級別

第2章“配置應用程序服務”中 ,我們有意部署了使用log4j Api的應用程序,并將log4j庫添加到WEB-INF / lib文件夾中。 該應用程序的部署很順利,省去了一個問題:為什么我們需要添加已經作為模塊包含在應用程序服務器中的庫? (在我們的例子中,在modules \ org \ apache \ log4j \ main路徑中)。

一般規則是,在JBoss AS 7上,每個已部署的應用程序模塊都與其他模塊隔離開來。 這意味著,默認情況下,它在AS模塊上不可見,在AS模塊上也不對應用程序可見。

但是,使用應用程序服務器模塊非常容易,并且可以用一句話來概括:將依賴項添加到所需模塊中,AS就會使用它。 應用程序服務器會自動添加依賴項,或者它們需要由用戶發出信號:

  • 核心模塊庫(即企業類)被視為隱式依賴項,因此當部署者檢測到它們的使用時,它們會自動添加到您的應用程序中
  • 用戶需要在應用程序的MANIFEST文件或定制的JBoss部署文件jboss-deployment-structure.xm l中明確聲明其他模塊庫(有關更多信息,請參見“高級部署策略”部分)。

隱式依賴:

指出企業應用程序通常使用的Api依賴項可能很麻煩。 因此,正如我們預期的那樣,應用程序服務器會自動為您添加它們。 當應用服務器檢測到某些該模塊的典型注釋或配置文件時,將添加一些注釋或配置文件。 例如,添加beans.xml文件會觸發自動焊接依賴。

以下思維導圖顯示了隱式添加到應用程序中的模塊的綜合視圖:

該圖像的含義很簡單:如果您的應用程序使用了所示的任何核心模塊,那么您無需指定任何依賴項,因為應用程序服務器能夠自動鏈接該模塊。 顯式依賴項不能被定義為隱式依賴項的模塊需要由用戶聲明。 在最初的示例中,未將log4j庫作為隱式依賴項提及,因此我們不得不將log4j JAR與應用程序打包在一起。 但是,我們可以指示部署者使用log4j庫,該庫捆綁在應用程序服務器分發中。 實現它的最簡單且推薦的方法是在META-INF / MANIFEST.MF中包括Dependencies:[module]聲明。 在我們的情況下,要使您的應用程序依賴于log4j,只需在清單文件中包含以下代碼:

依賴項:org.apache.log4j

請注意,模塊名稱并不總是與庫的軟件包名稱匹配。 實際的模塊名稱由module元素的name屬性在module.xml文件中指定。

用戶通常將使用Eclipse(或任何其他IDE)來更新清單文件,而無需執行任何繁瑣的存檔更新:

您不僅限于單個依賴項,還可以添加多個以逗號分隔的依賴項。 例如,為了同時添加對log4j和Apache Velocity Api的依賴,可以使用以下命令:

依賴項:org.apache.log4j,org.apache.velocity

您甚至可以通過添加export關鍵字將一個應用程序模塊使用的依賴項導出到其他應用程序。 例如,在較早的應用程序中,我們現在將依賴項導出到其他模塊:

標為依賴于Deployment.WebApp.war模塊的應用程序還將有權訪問其依賴項:

export參數還可以用于將依賴項導出到耳朵中包含的所有子部署。 因此,如果從耳朵的頂層(或通過ear / lib目錄中的jar)導出依賴關系,則該依賴關系也將對所有子部署單元可用。

在META-INF / MANIFEST.MF中,您還可以指定其他命令,這些命令可以修改服務器部署程序的行為。 例如,可以添加可選屬性,以指定如果在部署時未找到模塊,則部署不會失敗。

最后,當指定了services關鍵字時,部署者將嘗試加載放置在歸檔文件的META-INF / services中的服務。

服務Api已在Java SE 6中公開。服務可以定義為一組編程接口和類,它們提供對某些特定應用程序功能或特性的訪問。 服務提供者接口(SPI)是服務定義的一組公共接口和抽象類。

您可以通過實現服務提供商API來定義服務提供商。 通常,您將創建一個JAR文件來保存您的提供程序。 要注冊您的提供程序,您必須在JAR文件的META-INF / services目錄中創建一個提供程序配置文件。 將services屬性添加到META-INF / MANIFEST.MF時,您實際上將能夠加載META-INF / services目錄中包含的服務。

有關SPI Api的出色介紹,請訪問:http://java.sun.com/developer/technicalArticles/javase/extensible。

設置全局模塊

該選項與用于加載公共庫的舊AS方法有點類似,您曾經將它們放置在文件夾JBOSS_HOME / common / lib中。 如果在standalone.xml / domain.xml中定義了名為global-modules的部分,則將使該模塊可被其他AS模塊訪問。 例如,您可以選擇使用以下部分來代替聲明對log4j的依賴關系:

<subsystem xmlns="urn:jboss:domain:ee:1.0"><global-modules><module name="org.apache.log4j" /></global-modules>
</subsystem>

盡管通常不建議使用這種方法,但是由于它使我們回到了單片應用服務器的概念,因此它仍然可以帶來一些好處。 例如,如果您要遷移一些較舊的應用程序,并且您不希望或者根本無法將依賴關系指定到存檔中。

進階部署策略

到目前為止,我們所學的知識足以配置許多類型的應用程序。 如果您使用的是復雜的歸檔配置,例如具有多個模塊和依賴項的EAR歸檔,那么在單個文件中定義類加載策略將很有用。

配置文件jboss-deployment-structure.xml可以做到這一點。 使用此文件的優點有很多:

  • 您可以在一個文件中定義所有應用程序模塊的依賴關系
  • 您可以通過包含/排除所有或部分模塊來使用更細粒度的方式加載模塊類
  • 您可以為打包在企業歸檔中的應用程序定義類加載隔離策略

讓我們看一些實際的例子,jboss-deployment-structure.xml可以為您做什么。

設置單個模塊依賴性

我們已經學習了如何使用歸檔文件的MANIFEST文件中的Dependencies屬性來激活log4j依賴關系。 使用jboss-deployment-structure.xml文件可以達到相同的效果。 讓我們回顧一下存檔結構,它基本上是由一個名為WebApp.war的Web應用程序組成的。

如您所見,文件jboss-deployment-structure.xml需要放置在EAR的META-INF文件夾中。

其內容如下:

<jboss-deployment-structure><sub-deployment name="WebApp.war"><dependencies><module name="org.apache.log4j" /></dependencies></sub-deployment>
</jboss-deployment-structure>

文件jboss-deployment-structure并非專用于EAR。 實際上,您也可以將其放置在WebApp應用程序中,方法是將其放置在存檔的WEB-INF文件夾中。 但是,它僅適用于頂級歸檔。 因此,如果將jboss-deployment-structure.xml放在WAR的WEB-INF文件夾中,并且將WAR打包在EAR歸檔中,則將忽略jboss-deployment-structure.xml。

該文件的相關部分是sub-deployment元素,該元素引用Web應用程序(包括其中的依賴項)。 預期的結果是應用程序服務器將觸發對log4j Api的依賴關系,因此我們的Web應用程序將看到該依賴關系。

排除服務器自動依賴項

在本章的前面,我們已經展示了當滿足某些條件時,應用程序服務器如何能夠自動觸發某些依賴關系。 例如,如果部署JSF應用程序(包含faces-config.xml文件),那么將自動添加JSF 2.1 Api實現。

例如,這可能并不總是所需的選項,因為您要為該模塊提供另一個發行版實現。 您可以使用jboss-deployment-structure.xml中的排除部分輕松實現此目標,如下所示:

<jboss-deployment-structure><deployment><exclusions><module name="javax.faces.api" /><module name="com.sun.jsf-impl" /></exclusions> <dependencies><module name="javax.faces.api" slot="1.2"/> <module name="com.sun.jsf-impl" slot="1.2"/></dependencies> </deployment>
</jboss-deployment-structure>

注意,在“依賴項”部分中,我們添加了備用JSF 1.2實現,您的應用程序將使用該實現。 實際上,此JSF實現隨slot屬性指定的文件夾下的應用程序服務器分發以及javax.faces.api模塊路徑一起提供。 在我們的例子中,這對應于JBOSS_HOME / modules / javax / faces / api / 1.2文件夾。

隔離子部署

假設您有一個由Web應用程序,EJB模塊和包含實用程序類的JAR文件組成的應用程序。 所有子部署均位于存檔的根目錄,因此它們將能夠彼此看到。 但是,假設您的Web應用程序自身包含相同EJB的某些實現,這可能會很方便。 這是絕對可能的,因為Java EE 6規范允許您的Web應用程序在WEB-INF / classes或WEB-INF / lib文件夾中包括EJB類。

類加載器如何解決此沖突? 加載用于避免已加載類之間的任何沖突的類時,應用程序服務器類加載器具有優先級列表。

  • 容器(包括Java EE API)自動將模塊的最大優先級賦予模塊。 包含在modules文件夾中的庫在此類別中。
  • 然后,用戶在打包檔案的MANIFEST.MF中將其指示為Dependencies(或在jboss-deployment-structure.xml文件中)。
  • 接下來,打包在應用程序內部的庫,例如WEB-INF / lib或WEB-INF / classs中包含的類。
  • 最后,打包在同一EAR歸檔文件中的庫(在EAR的lib文件夾中)。

因此,在此示例中,位于WEB-INF文件夾中的EJB庫將“隱藏” EJB.jar頂級部署的實現。 無論這是否是容器中所需的操作,您仍然可以覆蓋它:

<jboss-deployment-structure> <ear-subdeployments-isolated>false</ear-subdeployments-isolated> <sub-deployment name="WebApp.war"><dependencies><module name="deployment.App.ear.EJB.jar" />   </dependencies></sub-deployment>
</jboss-deployment-structure>

在此示例中,我們向EJB.jar添加了一個依賴關系,該依賴關系位于存檔的根目錄,它將覆蓋Web應用程序中打包的實現。

請注意, ear-subdeployments-isolated元素位于文件頂部。 通過設置EAR隔離級別,您將能夠指示子部署模塊是否彼此可見。

此屬性的默認值為false ,這意味著子部署模塊將能夠看到彼此。 如果將隔離設置為true,則每個模塊將由不同的類加載器接收,因此,在我們的示例中,Web應用程序將無法找到EJB.jarUtility.jar庫中包含的類。

如果要使部署保持隔離狀態,但允許其中一些可見,則可以選擇以下幾種方法:

  • 將庫移至EAR / lib文件夾,以便將其作為單獨的模塊使用
  • 使用依賴關系或調用應用程序的MANIFEST.MF文件中的類路徑指定依賴關系

從以下屏幕截圖中,您可以看到如何通過將公共庫放置在lib文件夾中并向EJB類添加依賴項來正確設置EAR:

這是jboss-deployment-structure.xm l中所需的相應配置:

<jboss-deployment-structure> <ear-subdeployments-isolated>true</ear-subdeployments-isolated>      <sub-deployment name="WebApp.war"><dependencies><module name="deployment.App.ear.EJB.jar" /> </dependencies></sub-deployment>
</jboss-deployment-structure>

可以使用共享庫中的打包庫,因為Java EE 5通常用于保存EAR的所有模塊所使用的JAR文件。

共享庫的默認名稱是lib,但是您可以隨時使用META-INF / application.xml文件中的library-directory元素覆蓋它。 例如,假設您要使用公用文件夾來保存共享庫,則可以將其添加到application.xml中

<library-directory>common</library-directory>

作為附帶說明,我們建議您避免在共享文件夾中放置聲明組件的注釋(例如EJB3),因為它可能對部署過程產生意想不到的不良后果。 因此,我們強烈建議您僅將實用程序類放在共享庫文件夾中。

使用類路徑聲明解決依賴關系:

到目前為止,我們已經使用JBoss的方法解決了模塊之間的依賴關系,我們顯然建議將其作為首選。 盡管如此,我們也應該考慮Java引用EAR文件中包含的一個或多個庫的可移植方式。

可以使用模塊的MANIFEST.MF文件中的Class-Path屬性來完成此操作,該屬性需要引用另一個應用程序無法看到的庫(請看前面的示例,帶有隔離集的部署單元)為true )。

例如,假設您需要從Web應用程序中引用Utility.jar應用程序,然后只需將以下內容添加到META-INF / MANIFEST.MF中:

  • 清單版本:1.0
  • 類路徑:Utility.jar

實際上,您可以在Class-Path中包含多個庫,并以逗號分隔它們,這與使用JBoss的Dependencies屬性的方式非常相似。 與Dependencies屬性不同,Class-Path屬性指向引用依賴庫的實際JAR文件名(而不是模塊名)。

在類路徑方法和JBoss的Dependencies方法之間進行選擇,取決于應用程序的結構:通過使用JBoss的Dependencies,您可以購買到更多的選項,尤其是將Dependencies導出到其他部署的能力。較早。 支持JBoss的Dependencies方法的另一點是引用模塊的能力,這些模塊實際上并未打包在應用程序中。 例如,我們已經了解了如何向服務器分發的一部分log4j Api添加依賴項。

另一方面,類路徑方法的主要優點取決于應用程序的可移植性。 因此,如果您將全便攜式解決方案作為優先事項,則可以考慮切換到Class-Path清單屬性。

這是示例章節,摘自Francesco Marchioni編輯的JBoss AS 7 Configuration Deployment and Administration一書,該書正在運行一個名為mastertheboss.com的JBoss門戶。


翻譯自: https://www.javacodegeeks.com/2012/09/jboss-as-7-classloading-explained.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371416.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

打印機 共享 問題

1 用戶提報無法打印&#xff0c;經查被共享打印機無法聯網&#xff0c;先檢查網線是否正常&#xff08;換其他電腦是否能行&#xff09;&#xff0c;再檢查交換機是否正常&#xff0c;經查交換機需要重啟&#xff0c;然后解決問題。 2 被共享機器為32位操作系統&#xff0c;其余…

CoordinatorLayout 中ToolBar遮擋RecyclerView的內容

解決方法:在RecyclerView中添加 app:layout_behavior"string/appbar_scrolling_view_behavior"參考資料:http://stackoverflow.com/questions/32855889/content-behind-coordinatorlayout-appbarlayout 轉載于:https://www.cnblogs.com/niluogege/p/6511094.html

兵團職稱計算機準考證查詢,兵團初級會計準考證打印入口官網

兵團初級會計準考證打印入口官網為財政部會計資格評價中心網(http://kzp.mof.gov.cn)。準考證打印時間在4月16日前公布&#xff0c;考生需要在規定時間登錄財政部會計資格評價中心網(http://kzp.mof.gov.cn)下載并打印準考證。未在上述時限內下載打印準考證的&#xff0c;視作放…

用于集成測試的Maven Cargo插件

在項目生命周期中&#xff0c;非常普遍的需求是設置集成測試。 幸運的是&#xff0c;Maven具有針對此確切方案的內置支持&#xff0c;具有默認構建生命周期的以下階段&#xff08;來自Maven 文檔 &#xff09;&#xff1a; 集成前測試 &#xff1a; 執行集成測試之前所需的操作…

jquery-文檔操作

1.text() 設置或返回元素的text值 <div id"divname">old text</div> $(#divname).text("new text"); 將改變顯示的old為new [1] 參考w3scholl文檔操作 轉載于:https://www.cnblogs.com/hellokittyblog/p/9128397.html

bzoj 4259: 殘缺的字符串

這題好神啊&#xff0c;居然是fft&#xff0c;表示一直在往數據結構上想。 把*當成0&#xff0c;那么兩個串可以匹配當且僅當$$\sum (a[i]-b[i])^2\times a[i]\times b[i]0$$ 我們可以把平方拆開&#xff0c;然后就變成了幾個乘積相加的形式&#xff0c;那就大力翻轉一個串然后…

錄屏時計算機休眠,硬盤錄像機里硬盤提示休眠,什么意思?

休眠&#xff0c;電腦內存中的數據寫入硬盤&#xff0c;關閉電腦。重新啟動的時候重新將數據加載到內存中&#xff0c;恢復休眠前狀態。睡眠&#xff0c;和休眠一個意思&#xff0c;98系統下叫睡眠。xp系統叫休眠。98系統睡眠時&#xff0c;內存數據寫入虛擬內存&#xff0c;xp…

MySQL數據庫的基本操作

-- 連接mysql 數據庫(前提是配置好MySQL數據庫的環境變量&#xff0c;加入path)mysql -uroot -p -- 設置文本的輸入輸出編碼&#xff1a;cmd 使用的是gbk&#xff0c;不然顯示亂碼set names gbk; -- 創建數據庫create database mydatabase charset utf8; -- 創建用戶 user001cr…

使用NoSQL實施實體服務–第5部分:使用云提高自治性

在先前的文章中&#xff0c;我討論了如何通過結合使用Java Web Services &#xff0c; Java EE和CouchDB NoSQL數據庫為產品構建SOA“實體”服務。 在本系列的最后一篇文章中&#xff0c;我將利用我已經創建的一些技術資產&#xff0c;并使用一些流行的SOA模式實現一些新的用戶…

樂高計算機發展史教程,【樂高產品發展史特別篇】樂高恐龍發展史

—— 寫在前面 ——2018年6月22日&#xff0c;《侏羅紀世界2&#xff1a;失落王國》全球上映&#xff1b;4月16日&#xff0c;樂高同名系列套裝全球發售。恐龍是一個伴隨了樂高產品二十余年的主題&#xff0c;其實在一年以前就有這樣一個計劃完成樂高恐龍發展史的相關內容&…

mvc 連接數據庫但單復值得問題

1. The model backing the ‘MusicStoreDBContext‘ context has changed since the database was created. Consider using Code First Migrations to update the database Movie這個表是用來記錄Model的版本號的&#xff0c;你每次重新生成一次數據庫它就會重新給ModelHash…

Mybatis處理表關聯(懶加載)

1.關系型數據庫&#xff1f; 數據庫中的表對象之間是有關系的。 一對一&#xff0c;一對多&#xff0c;多對多。 ORM映射。數據庫表映射到實體對象。 實體與實體之間是有關系的。 一對多的關系。 比如商品分類表與商品表之間的關系&#xff0c;就是一對多的關系。 入庫主表與入…

Spring–設計領域模型和服務層

我們將為時間表管理構建應用程序。 因此&#xff0c;讓我們首先考慮一些用例和實體。 讓我用幾個項目符號寫它們&#xff1a; 任務由經理分配給員工。 一項任務可以分配給許多員工。 員工將他在某些任務上工作的小時數填滿至系統。 經理/員工查看時間表上的報告&#xff08;時…

如何把很多照片拼成一張照片_一張現場照片引發的中韓之爭

來源&#xff1a;渤海新水手聊船專欄前幾天&#xff0c;微信群里(造船質量技術高級交流群)一位網友發了一張韓國船廠的現場照片&#xff0c;沒想到瞬間引發全群幾十位網友的熱烈討論&#xff0c;中韓之爭就此上演&#xff01;照片反映出的是國內船廠很難做到的部分——分段預裝…

計算機文檔設置,電腦這樣設置快速的共享文件、分享文檔!

原標題&#xff1a;電腦這樣設置快速的共享文件、分享文檔&#xff01;在日常辦公的時候&#xff0c;有時需要共同使用一些文件或者文檔或者一些視頻資料。那么要怎么方便的使用這些共同的資源呢&#xff1f;當然這時大家可能會說可以用QQ、微信傳給對方不就可以了。但是如果文…

關于vue 框架與后臺框架的混合使用的嘗試

這幾天我在研究前臺框架和后臺框架融合的問題,進行了一些嘗試; 我前臺選擇的是 vue,當然也可以選擇 react 等其他 mvvm 框架,不過 vue 對于我來說是最熟悉的; 后臺話,我選擇的是 php 的 lumen 框架,他是laravel 的簡化版,因為比較輕量,所以這也是我的選擇; 先說下我這邊的環境:…

GitHub上整理的一些工具

GitHub上整理的一些工具 GitHub 2015-11-19 10:10:47 發布您的評價: 0.0 收藏 5收藏技術站點 Hacker News&#xff1a;非常棒的針對編程的鏈接聚合網站Programming reddit&#xff1a;同上MSDN&#xff1a;微軟相關的官方技術集中地&#xff0c;主要是文檔類infoq&#x…

服務器 raid 1t硬盤嗎,用了4塊1T的硬盤,做了raid5,顯示有2.7T,但是分區做完系統后,有700多G不能動...

滿意答案ouourpt892013.11.14采納率&#xff1a;46% 等級&#xff1a;12已幫助&#xff1a;13583人出現這種情況是由于創建的硬盤使用的是基本磁盤(MBR)格式&#xff0c;因受MBR磁盤格式技術的限制&#xff0c;MBR磁盤只支持2TB的磁盤容量&#xff0c;所以出現了你所說的情況…

如何編寫更好的POJO服務

在Java中&#xff0c;您可以輕松地在Plain Old Java Object&#xff08;POJO&#xff09;類中實現一些業務邏輯&#xff0c;并且可以在高級服務器或框架中輕松運行它們。 有許多服務器/框架&#xff0c;例如JBossAS&#xff0c;Spring或Camel等&#xff0c;它們使您可以部署POJ…

mongo 唯一約束索引_快速掌握mongoDB(三)——mongoDB的索引詳解

1 mongoDB索引的管理本節介紹mongoDB中的索引&#xff0c;熟悉mysql/sqlserver等關系型數據庫的小伙伴應該都知道索引對優化數據查詢的重要性。我們先簡單了解一下索引&#xff1a;索引的本質就是一個排序的列表&#xff0c;在這個列表中存儲著索引的值和包含這個值的數據(數據…