欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MongoDB中連接池、索引、事務(wù)

 更新時(shí)間:2023年01月11日 08:43:32   作者:哪吒編程  
這篇文章主要介紹了MongoDB中連接池、索引、事務(wù)的相關(guān)資料,需要的朋友可以參考下

三分鐘你將學(xué)會(huì):

  • MongoDB連接池的使用方式與常用參數(shù)
  • 查詢五步走,能活九十九?
  • MongoDB索引與MySQL索引有何異同?
  • MongoDB事務(wù)與ACID
  • 什么是聚合框架?

在最開(kāi)始接觸MongoDB的時(shí)候,是通過(guò) MongoDatabase database = new MongoClient("localhost", 27017).getDatabase("test"); 的方式連接MongoDB。

它會(huì)為每個(gè)請(qǐng)求創(chuàng)建一個(gè)新的連接,然后銷毀,一般數(shù)據(jù)庫(kù)的連接都是TCP連接,TCP是長(zhǎng)連接,如果不斷開(kāi),就會(huì)一直連著。

眾所周知,新建一個(gè)數(shù)據(jù)庫(kù)連接的代價(jià)是很大的,復(fù)用現(xiàn)有連接才是首選,連接池就是干這個(gè)的。

連接池 = 數(shù)據(jù)庫(kù)連接的緩存

因此當(dāng)需要新的連接時(shí),就可以復(fù)用連接池中緩存的連接了。如果使用得當(dāng),連接池可以最大程度的降低數(shù)據(jù)庫(kù)的新連接數(shù)量、創(chuàng)建頻率。

可以通過(guò)Mongo.get方法獲得DB對(duì)象,表示MongoDB數(shù)據(jù)庫(kù)的一個(gè)連接。默認(rèn)情況下,當(dāng)執(zhí)行完數(shù)據(jù)庫(kù)的查詢操作后,連接將自動(dòng)回到連接池中,通過(guò)api中的finally方法,將連接歸還給連接池,不需要手動(dòng)調(diào)用。

MongoDB查詢數(shù)據(jù)五步走

  • MongoDB Client需要找到可用的MongoDB;
  • Server MongoDB Client需要和 MongoDB Server建立 Connection;
  • 應(yīng)用程序處理線程從 Connection Pool中獲取 Connection;
  • 數(shù)據(jù)傳輸(獲取連接后,進(jìn)行 Socket 通信,獲取數(shù)據(jù));
  • 斷開(kāi) Collection;

MongoDB連接池的參數(shù)配置

#線程池允許的最大連接數(shù)
connectionsPerHost: 40
#線程池中連接的最大空閑時(shí)間
threadsAllowedToBlockForConnectionMultiplier: 20
#1、MongoDB Client需要找到可用的MongoDB Server所需要的等待時(shí)間
serverSelectionTimeout: 40000
#2、MongoDB Client需要和MongoDB Server建立(new)Connection
connectTimeout: 60000
#3、應(yīng)用程序處理線程從Connection Pool中獲取Connection
maxWaitTime: 120000
#自動(dòng)重連
autoConnectRetry: true
#socket是否?;?
socketKeepAlive: true
#4、數(shù)據(jù)傳輸(獲取連接后,進(jìn)行Socket通信,獲取數(shù)據(jù))
socketTimeout: 30000
slaveOk: true
dbName: ngo
#是否進(jìn)行權(quán)限驗(yàn)證
auth: false
#用戶名
username: ngo
#密碼
password: 12345678

下面簡(jiǎn)單說(shuō)一下MongoDB的索引

索引可以顯著縮短查詢時(shí)間,但是,使用索引也是有代價(jià)的,索引字段的增刪改操作會(huì)花費(fèi)更長(zhǎng)時(shí)間,因?yàn)樵诟臄?shù)據(jù)時(shí),除了更新文檔數(shù)據(jù),MongoDB還必須更新索引。這個(gè)和關(guān)系型數(shù)據(jù)庫(kù)是一樣的。MongoDB的索引機(jī)制和關(guān)系型數(shù)據(jù)庫(kù)的索引機(jī)制大同小異。

要選擇為哪些字段建索引,可以查看常用的查詢以及那些需要快速執(zhí)行的查詢。

索引基數(shù)是指集合中某個(gè)字段有多少個(gè)不同的值

通常來(lái)說(shuō),一個(gè)字段的基數(shù)越高,這個(gè)字段上的索引就越有用。這是因?yàn)檫@樣的索引能夠迅速將搜索范圍縮小到一個(gè)比較小的結(jié)果集。對(duì)于基數(shù)比較低的字段,索引通常無(wú)法排除大量可能的匹配項(xiàng)。

索引可以顯著縮短查詢時(shí)間,但是,使用索引也是有代價(jià)的,索引字段的增刪改操作會(huì)花費(fèi)更長(zhǎng)時(shí)間,因?yàn)樵诟臄?shù)據(jù)時(shí),除了更新文檔數(shù)據(jù),MongoDB還必須更新索引。這個(gè)和關(guān)系型數(shù)據(jù)庫(kù)是一樣的。MongoDB的索引機(jī)制和關(guān)系型數(shù)據(jù)庫(kù)的索引機(jī)制大同小異。

要選擇為哪些字段建索引,可以查看常用的查詢以及那些需要快速執(zhí)行的查詢。

MongoDB內(nèi)嵌文檔是什么?

MongoDB允許深入文檔內(nèi)部,對(duì)內(nèi)嵌字段和數(shù)組創(chuàng)建索引。內(nèi)嵌對(duì)象和數(shù)組字段可以和頂級(jí)字段一起在符合索引中使用。

可以在內(nèi)嵌文檔的鍵上創(chuàng)建索引,方法與在普通鍵上創(chuàng)建索引相同。

在info中的address字段上建立索引。對(duì)子文檔創(chuàng)建索引,只有進(jìn)行與子文檔字段順序完全匹配的查詢時(shí),查詢優(yōu)化器才能使用"address"上的索引。

MongoDB事務(wù)是什么?

事務(wù)是數(shù)據(jù)庫(kù)中處理的邏輯單元,包括一個(gè)或多個(gè)數(shù)據(jù)庫(kù)操作,既可以是讀操作,也可以是寫(xiě)操作,MongoDB支持跨個(gè)多操作、集合、數(shù)據(jù)庫(kù)、文檔和分片的ACID事務(wù)。

事務(wù)的關(guān)鍵:它要么都成功,要么都失敗。

ACID是什么?

ACID是一個(gè)事務(wù)所需要具備的一組屬性集合。

ACID是原子性atomicity、一致性consistency、隔離性isolation、持久性durability的縮寫(xiě)。

ACID事務(wù)可以確保數(shù)據(jù)和數(shù)據(jù)庫(kù)狀態(tài)的有效性,即使在出現(xiàn)斷電或其它錯(cuò)誤的情況下也是如此。

原子性確保了事務(wù)中的所有操作要么都被執(zhí)行、要么都不被執(zhí)行。

一致性確??扇绻聞?wù)成功,那么數(shù)據(jù)庫(kù)將從一個(gè)一致性狀態(tài)轉(zhuǎn)移到下一個(gè)一致性狀態(tài)。

隔離性是允許多個(gè)事務(wù)同時(shí)在數(shù)據(jù)庫(kù)中運(yùn)行的屬性。它保證了一個(gè)事務(wù)不會(huì)查看到任何其它事務(wù)的部分結(jié)果,這意味著多個(gè)事務(wù)并行運(yùn)行于依次運(yùn)行每個(gè)事務(wù)所獲得的結(jié)果都相同。

持久性確保了在提交事務(wù)時(shí),即使系統(tǒng)發(fā)生故障,所有數(shù)據(jù)也都會(huì)保持持久化。

當(dāng)數(shù)據(jù)庫(kù)滿足所有這些屬性并且只有成功的事務(wù)才會(huì)被處理時(shí),它就被稱為符合ACID的數(shù)據(jù)庫(kù)。如果在事務(wù)完成之前發(fā)生故障,ACID確保不會(huì)更改任何數(shù)據(jù)。

MongoDB是一個(gè)分布式數(shù)據(jù)庫(kù),它支持跨副本集和跨分片的ACID事務(wù)。網(wǎng)絡(luò)層增加了額外的復(fù)雜性。

MongoDB提供了兩種API來(lái)使用事務(wù)

  • 第一種與關(guān)系型數(shù)據(jù)庫(kù)類似(如start_transaction和commit_transaction),稱為核心API;
  • 第二種稱為回調(diào)API,一般推薦使用這種;

核心API不會(huì)為大多數(shù)錯(cuò)誤提供重試邏輯,它要求開(kāi)發(fā)人員為操作、事務(wù)提交函數(shù)以及所需的任何重試和錯(cuò)誤邏輯手動(dòng)編寫(xiě)代碼。

與核心API不同,回調(diào)API提供了一個(gè)簡(jiǎn)單的函數(shù),該函數(shù)封裝了大量的功能,包括啟動(dòng)與指定邏輯會(huì)話關(guān)聯(lián)的事務(wù)、執(zhí)行作為回調(diào)函數(shù)提供的函數(shù)以及提交事務(wù)?;卣{(diào)API還提供了處理提交錯(cuò)誤的重試邏輯。在MongoDB4.2中添加回調(diào)API是為了簡(jiǎn)化使用事務(wù)的應(yīng)用程序開(kāi)發(fā),也便于添加處理事務(wù)錯(cuò)誤的應(yīng)用程序重試邏輯。

核心API和回調(diào)API的比較

核心API回調(diào)API
需要顯示調(diào)用才能啟動(dòng)和提交事務(wù)啟動(dòng)事務(wù)、執(zhí)行指定操作,然后提交(可在發(fā)生錯(cuò)誤前終止)
不包含TransientTransactionError和UnknowTransactionCommitResult的錯(cuò)誤處理邏輯,而是提供了為這些錯(cuò)誤進(jìn)行自定義處理的靈活性自動(dòng)為TransientTransactionError和UnknowTransactionCommitResult提供錯(cuò)誤處理邏輯
要求為特定事務(wù)將顯式的邏輯會(huì)話傳遞給API要求為特定事務(wù)將顯式的邏輯會(huì)話傳遞給API

聚合框架是什么?

聚合框架是MongoDB中的一組分析工具,可以對(duì)一個(gè)或多個(gè)集合中的文檔進(jìn)行分析。

聚合框架基于管道的概念,使用聚合管道可以從MongoDB集合獲取輸入,并將該集合中的文檔傳遞到一個(gè)或多個(gè)階段,每個(gè)階段對(duì)輸入執(zhí)行不同的操作。每個(gè)階段都將之前階段輸出的內(nèi)容作為輸入。所有階段的輸入和輸出都是文檔,可以稱為文檔流。

每個(gè)階段都會(huì)提供一組按鈕或可調(diào)參數(shù),可以通過(guò)控制它們來(lái)設(shè)置該階段的參數(shù),以執(zhí)行各種任務(wù)。

這些可調(diào)參數(shù)通常采用運(yùn)算符的形式,可以使用這些運(yùn)算符來(lái)修改字段、執(zhí)行算術(shù)運(yùn)算、調(diào)整文檔形狀、執(zhí)行各種累加任務(wù)或其它各種操作。

常見(jiàn)的聚合管道包括匹配match、投射project、排序sort、跳過(guò)skip、限制limit。

到此這篇關(guān)于MongoDB中連接池、索引、事務(wù)的文章就介紹到這了,更多相關(guān)MongoDB中連接池、索引、事務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mongo中模糊查詢的綜合應(yīng)用

    mongo中模糊查詢的綜合應(yīng)用

    這篇文章主要給大家介紹了關(guān)于mongo中模糊查詢的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mongodb具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 記一次Mongodb中admin數(shù)據(jù)庫(kù)導(dǎo)致的事故

    記一次Mongodb中admin數(shù)據(jù)庫(kù)導(dǎo)致的事故

    這篇文章主要給大家介紹了關(guān)于一次Mongodb中admin數(shù)據(jù)庫(kù)導(dǎo)致的事故的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • mongodb 實(shí)現(xiàn)遠(yuǎn)程連接

    mongodb 實(shí)現(xiàn)遠(yuǎn)程連接

    這篇文章主要介紹了mongodb 實(shí)現(xiàn)遠(yuǎn)程連接,需要的朋友可以參考下
    2014-07-07
  • MongoDB詭異問(wèn)題之sh.stopBalancer卡住的解決方法

    MongoDB詭異問(wèn)題之sh.stopBalancer卡住的解決方法

    這篇文章主要給大家介紹了關(guān)于MongoDB詭異問(wèn)題之sh.stopBalancer卡住解決的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • MongoDB磁盤(pán)空間占滿導(dǎo)致數(shù)據(jù)庫(kù)被鎖定的解決方法

    MongoDB磁盤(pán)空間占滿導(dǎo)致數(shù)據(jù)庫(kù)被鎖定的解決方法

    我在實(shí)際項(xiàng)目中,遇到一個(gè)問(wèn)題,隨著數(shù)據(jù)每天的不斷增加,導(dǎo)致mongodb的磁盤(pán)空間站滿了,數(shù)據(jù)庫(kù)被鎖了,無(wú)法使用,所以本文給大家介紹了清理MongoDB數(shù)據(jù)和磁盤(pán)空間的方法,需要的朋友可以參考下
    2024-04-04
  • Windows系統(tǒng)啟動(dòng)MongoDB報(bào)錯(cuò)無(wú)法連接服務(wù)器的問(wèn)題及解決方案

    Windows系統(tǒng)啟動(dòng)MongoDB報(bào)錯(cuò)無(wú)法連接服務(wù)器的問(wèn)題及解決方案

    在Windows系統(tǒng)中啟動(dòng)MongoDB時(shí)遇到連接拒絕的錯(cuò)誤,通常是因?yàn)榉?wù)未運(yùn)行或配置問(wèn)題,本文給大家分享Windows系統(tǒng)啟動(dòng)MongoDB報(bào)錯(cuò)無(wú)法連接服務(wù)器的問(wèn)題及解決方案,一起看看吧
    2024-10-10
  • Mongoose find 查詢返回json數(shù)據(jù)處理方式

    Mongoose find 查詢返回json數(shù)據(jù)處理方式

    這篇文章主要介紹了Mongoose find 查詢返回json數(shù)據(jù)處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • MongoDB為什么比Mysql快原理解析

    MongoDB為什么比Mysql快原理解析

    這篇文章主要為大家介紹了MongoDB為什么比Mysql快原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • MongoDB中查詢(find操作符)詳細(xì)指南

    MongoDB中查詢(find操作符)詳細(xì)指南

    MongoDB是領(lǐng)先的NoSQL數(shù)據(jù)庫(kù)之一,以其快速的性能,靈活的模式,可伸縮性和強(qiáng)大的索引功能而聞名,下面這篇文章主要給大家介紹了關(guān)于MongoDB中查詢(find操作符)的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • 在PyCharm中安裝Mongo Plugin的詳細(xì)教程

    在PyCharm中安裝Mongo Plugin的詳細(xì)教程

    這篇文章主要介紹了在PyCharm中安裝Mongo Plugin的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論