最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

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

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

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

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

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

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

下面簡單說一下MongoDB的索引

索引可以顯著縮短查詢時間,但是,使用索引也是有代價的,索引字段的增刪改操作會花費更長時間,因為在更改數(shù)據(jù)時,除了更新文檔數(shù)據(jù),MongoDB還必須更新索引。這個和關(guān)系型數(shù)據(jù)庫是一樣的。MongoDB的索引機制和關(guān)系型數(shù)據(jù)庫的索引機制大同小異。

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

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

通常來說,一個字段的基數(shù)越高,這個字段上的索引就越有用。這是因為這樣的索引能夠迅速將搜索范圍縮小到一個比較小的結(jié)果集。對于基數(shù)比較低的字段,索引通常無法排除大量可能的匹配項。

索引可以顯著縮短查詢時間,但是,使用索引也是有代價的,索引字段的增刪改操作會花費更長時間,因為在更改數(shù)據(jù)時,除了更新文檔數(shù)據(jù),MongoDB還必須更新索引。這個和關(guān)系型數(shù)據(jù)庫是一樣的。MongoDB的索引機制和關(guān)系型數(shù)據(jù)庫的索引機制大同小異。

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

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

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

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

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

MongoDB事務(wù)是什么?

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

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

ACID是什么?

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

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

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

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

一致性確保可如果事務(wù)成功,那么數(shù)據(jù)庫將從一個一致性狀態(tài)轉(zhuǎn)移到下一個一致性狀態(tài)。

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

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

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

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

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

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

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

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

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

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

聚合框架是什么?

聚合框架是MongoDB中的一組分析工具,可以對一個或多個集合中的文檔進行分析。

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

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

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

常見的聚合管道包括匹配match、投射project、排序sort、跳過skip、限制limit。

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

相關(guān)文章

最新評論

莱西市| 韶关市| 徐水县| 兴国县| 清水县| 阳高县| 勐海县| 衡阳市| 杭锦后旗| 鄂尔多斯市| 突泉县| 沾益县| 兴化市| 郓城县| 镇安县| 普陀区| 安康市| 博野县| 怀来县| 涟水县| 彰化县| 扎囊县| 乌鲁木齐县| 依兰县| 台州市| 嘉祥县| 龙井市| 寿宁县| 图们市| 宣威市| 昆山市| 修文县| 西平县| 佳木斯市| 湘乡市| 隆化县| 元谋县| 温州市| 台东县| 瑞金市| 宝鸡市|