馬化騰:騰訊將和國家天文臺共同釋出探星計劃
MongoDB的使用
1、使用navicat連線
為了方便開發,採用navicat連線。需要注意的是navicat只有新版才能連線mongodb,我這裡用的最新版本v15。沒有安裝最新版navicat的盆友,闊以參照下面連結下載安裝:
https://www.jianshu.com/p/3af7fccc22c7
測試連線:
檢視文件時,有幾個很有用的功能按鈕:
基礎的使用比較簡單,可檢視相關使用教程,比如菜鳥教程:https://www.runoob.com/mongodb/mongodb-tutorial.html
2、注意事項
針對使用中遇到的問題,這裡列出幾點注意事項:
1)索引
a. 合理建立索引
一定要合理建立索引, 有很多人都被宣傳片迷惑,認為mongo的讀取速度本身就應該很快,所以從mysql轉過來後,就連建立索引都忘了,當表(collection) 很大時,不建立索引是非常影響效能的。
比如:db.users.createIndex({open: 1, close: 1}, {background: true})
b.建立索引導致資料阻塞
在前臺建索引時需要佔用一個寫鎖(而且不會臨時放棄),如果集合的資料量很大,建索引通常要花比較長時間,特別容易引起問題。
解決的方法很簡單,MongoDB 提供了兩種建索引的訪問,一種是 background 方式,不需要長時間佔用寫鎖,另一種是非 background 方式,需要長時間佔用鎖。使用 background 方式就可以解決問題。
例如,為超大表 users 建立索引
千萬不要使用:
db.users.createIndex({open: 1, close: 1})
而應該使用:
db.users.createIndex({open: 1, close: 1}, {background: true})
2)只返回想要的列
大表查詢時,只返回你想要的列。特別是單collection欄位資料量比較大時,非常容易引起效能問題。
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
3)避免使用array
MongoDB 的 Array 欄位是比較獨特的一個特性,它可以在單個 document 裡儲存一些簡單的一對多關係。
但是,我們儘量避免在model裡面使用Array型別的欄位,因為使用了Array,查詢時,不可避免的會使用in操作,in操作無法利用索引,這個在關係型資料庫裡面也是存在的,大表操作一定要避免。
比如:這裡的value就是一個Array型別的欄位
1 { 2 "_id": ObjectId("60ae5841e72f0000e3001c74"), 3 "level": 2, 4 "pid": "60ae5116e72f0000e3001c51", 5 "value": [ 6 { 7 "key": "v1", 8 "name": "法院名稱", 9 "value": "法院" 10 }, 11 { 12 "key": "v2", 13 "name": "指標名稱/值", 14 "value": "餘額(萬元)" 15 }, 16 { 17 "key": "v3", 18 "name": "指標名稱/值", 19 "value": "到賬/發放總額(萬元)" 20 } 21 ], 22 "type": "json", 23 "isDelete": NumberInt("0") 24 }
4)一次返回所有資料
儘量一次返回所有需要的資料,避免GET_MORE,避免遊標操作,當用戶進行查詢迭代時,mongo會首先返回一個數據塊供你迭代,當你迭代的資料超過這個資料塊時,mongoid 發起 GET_MORE 命令移動遊標獲取下一個資料塊,而就是這個移動遊標的操作就非常慢,特別是你返回的列比較多的時候,效能非常低。每次返回的資料塊的大小是由batchSize控制的,可以通過修改它的預設值進行控制。
5)事務
mongodb不支援事務,所以你一定要考慮清楚,權衡利弊。
參考連結:https://www.cnblogs.com/l1pe1/p/7871859.html