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

MongoDB中連接池、索引、事務

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

三分鐘你將學會:

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

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

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

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

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

因此當需要新的連接時,就可以復用連接池中緩存的連接了。如果使用得當,連接池可以最大程度的降低數(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;
  • 應用程序處理線程從 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、應用程序處理線程從Connection Pool中獲取Connection
maxWaitTime: 120000
#自動重連
autoConnectRetry: true
#socket是否?;?
socketKeepAlive: true
#4、數(shù)據(jù)傳輸(獲取連接后,進行Socket通信,獲取數(shù)據(jù))
socketTimeout: 30000
slaveOk: true
dbName: ngo
#是否進行權限驗證
auth: false
#用戶名
username: ngo
#密碼
password: 12345678

下面簡單說一下MongoDB的索引

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

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

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

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

索引可以顯著縮短查詢時間,但是,使用索引也是有代價的,索引字段的增刪改操作會花費更長時間,因為在更改數(shù)據(jù)時,除了更新文檔數(shù)據(jù),MongoDB還必須更新索引。這個和關系型數(shù)據(jù)庫是一樣的。MongoDB的索引機制和關系型數(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事務是什么?

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

事務的關鍵:它要么都成功,要么都失敗。

ACID是什么?

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

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

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

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

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

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

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

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

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

MongoDB提供了兩種API來使用事務

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

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

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

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

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

聚合框架是什么?

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

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

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

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

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

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

相關文章

最新評論

西昌市| 临泉县| 成安县| 丰镇市| 郸城县| 南昌市| 临澧县| 陵川县| 吉木萨尔县| 阳信县| 曲靖市| 德保县| 喀什市| 常宁市| 灵石县| 昌乐县| 西乌珠穆沁旗| 平山县| 丁青县| 合肥市| 万盛区| 长顺县| 岫岩| 新和县| 彰化县| 许昌市| 文山县| 泸定县| 炉霍县| 鄱阳县| 万荣县| 磐石市| 乐陵市| 舞阳县| 迁安市| 鄯善县| 望江县| 富裕县| 南宁市| 天峨县| 合肥市|