久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何提升MongoDB的性能

131次閱讀
沒有評論

共計 2278 個字符,預計需要花費 6 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

如何提升 MongoDB 的性能?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

(1)文檔中的_id 鍵推薦使用默認值,禁止向_id 中保存自定義的值。

解讀:MongoDB 文檔中都會有一個“_id”鍵,默認是個 ObjectID 對象(標識符中包含時間戳、機器 ID、進程 ID 和計數器)。MongoDB 在指定_id 與不指定_id 插入時 速度相差很大,指定_id 會減慢插入的速率。

(2)推薦使用短字段名。

解讀:與關系型數據庫不同,MongoDB 集合中的每一個文檔都需要存儲字段名,長字段名會需要更多的存儲空間。

(3)MongoDB 索引可以提高文檔的查詢、更新、刪除、排序操作,所以結合業務需求,適當創建索引。

(4)每個索引都會占用一些空間,并且導致插入操作的資源消耗,因此,建議每個集合的索引數盡量控制在 5 個以內。

(5)對于包含多個鍵的查詢,創建包含這些鍵的復合索引是個不錯的解決方案。復合索引的鍵值順序很重要,理解索引最左前綴原則。

解讀:例如在 test 集合上創建組合索引{a:1,b:1,c:1}。執行以下 7 個查詢語句:

db.test.find({a:”hello”}) // 1
db.test.find({b:”sogo”, a:”hello”}) // 2
db.test.find({a:”hello”,b:”sogo”, c:”666”}) // 3
db.test.find({c:”666”, a:”hello”}) // 4
db.test.find({b:”sogo”, c:”666”}) // 5
db.test.find({b:”sogo” }) // 6
db.test.find({c:”666”}) // 7

以上查詢語句可能走索引的是 1、2、3、4

查詢應包含最左索引字段,以索引創建順序為準,與查詢字段順序無關。

最少索引覆蓋最多查詢。

(6)TTL 索引(time-to-live index,具有生命周期的索引),使用 TTL 索引可以將超時時間的文檔老化,一個文檔到達老化的程度之后就會被刪除。

解讀:創建 TTL 的索引必須是日期類型。TTL 索引是一種單字段索引,不能是復合索引。TTL 刪除文檔后臺線程每 60s 移除失效文檔。不支持定長集合。

(7)需要在集合中某字段創建索引,但集合中大量的文檔不包含此鍵值時,建議創建稀疏索引。

解讀:索引默認是密集型的,這意味著,即使文檔的索引字段缺失,在索引中也存在著一個對應關系。在稀疏索引中,只有包含了索引鍵值的文檔才會出現。

(8)創建文本索引時字段指定 text,而不是 1 或者 -1。每個集合只有一個文本索引,但是它可以為任意多個字段建立索引。

解讀:文本搜索速度快很多,推薦使用文本索引替代對集合文檔的多字段的低效查詢。

(9)使用 findOne 在數據庫中查詢匹配多個項目,它就會在自然排序文件集合中返回第一個項目。如果需要返回多個文檔,則使用 find 方法。

(10)如果查詢無需返回整個文檔或只是用來判斷鍵值是否存在,可以通過投影(映射)來限制返回字段,減少網絡流量和客戶端的內存使用。

解讀:既可以通過設置 {key:1} 來顯式指定返回的字段,也可以設置 {key:0} 指定需要排除的字段。

(11)除了前綴樣式查詢,正則表達式查詢不能使用索引,執行的時間比大多數選擇器更長,應節制性地使用它們。

(12)在聚合運算中,$ 要在 match 要在 $group 前面,通過 $ 前置,可以減少 match 前置,可以減少 $ group 操作符要處理的文檔數量。

(13)通過操作符對文檔進行修改,通常可以獲得更好的性能,因為,不需要往返服務器來獲取并修改文檔數據,可以在序列化和傳輸數據上花費更少的時間。

(14)批量插入(batchInsert)可以減少數據向服務器的提交次數,提高性能。但是批量提交的 BSON Size 不超過 48MB。

(15)禁止一次取出太多的數據進行排序,MongoDB 目前支持對 32M 以內的結果集進行排序。如果需要排序,請盡量限制結果集中的數據量。

(16)查詢中的某些 $ 操作符可能會導致性能低下,如操作符可能會導致性能低下,如 $ne,$,not,$exists,$nin,$or 盡量在業務中不要使用。

a) $exist: 因為松散的文檔結構導致查詢必須遍歷每一個文檔;

b) $ne: 如果當取反的值為大多數,則會掃描整個索引;

c) $not: 可能會導致查詢優化器不知道應當使用哪個索引,所以會經常退化為全表掃描;

d) $nin: 全表掃描;

e) \$ 有多個條件就會查詢多少次,最后合并結果集,應該考慮裝換為 or: 有多個條件就會查詢多少次,最后合并結果集,應該考慮裝換為 $in。

(17)固定集合可以用于記錄日志,其插入數據更快,可以實現在插入數據時,淘汰最早的數據。需求分析和設計時,可考慮此特性,即提高了性能,有省去了刪除動作。

解讀:固定集合需要顯式創建,指定 Size 的大小,還能夠指定文檔的數量。集合不管先達到哪一個限制,之后插入的新文檔都會把最老的文檔移出。

(18)集合中文檔的數據量會影響查詢性能,為保持適量,需要定期歸檔。

Mongodb 性能優化

數據庫性能對軟件整體性能有著至關重要的影響,對于 Mongodb 數據庫常用的性能優化方法主要有:

1、范式化與反范式化;

2、填充因子的使用;

3、索引的使用;

看完上述內容,你們掌握如何提升 MongoDB 的性能的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計2278字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 深水埗区| 铁岭县| 沽源县| 上饶市| 岳池县| 武冈市| 昌宁县| 偃师市| 兴和县| 延安市| 政和县| 界首市| 迭部县| 巴林左旗| 平利县| 万载县| 桓仁| 长岭县| 菏泽市| 蓝田县| 延边| 米泉市| 龙江县| 铜鼓县| 建德市| 阜宁县| 开鲁县| 阳城县| 新巴尔虎左旗| 虹口区| 池州市| 怀安县| 若尔盖县| 疏附县| 佛山市| 济阳县| 呼伦贝尔市| 图们市| 平泉县| 安福县| 德令哈市|