日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:52003
  • 待審:43
  • 小程序:12
  • 文章:1047590
  • 會員:762

MongoDB索引使用總結

MongoDB 是目前最流行的文檔型數據庫。MongoDB 的采用類 json 的存儲格式對開發者來說非常友好。本文梳理了 MongoDB 索引的底層結構以及使用經驗,不足之處歡迎大家指正。

背景

MongoDB 提供范圍廣泛的索引類型和功能以及特定于語言的排序順序,以支持對數據的復雜訪問模式。 MongoDB 索引可以按需創建和刪除來適應不斷變化的應用程序需求和查詢模式,并且可以在文檔中的任何字段上聲明,包括嵌套在數組中的字段。本文介紹一下 MongoDB 中的索引底層結構、索引遍歷過程、建索引以及如何使用。

基本使用

分類

MongoDB 中的索引與其他數據庫系統中的索引類似。 MongoDB 在集合級別定義索引,并支持 MongoDB 集合中文檔的任何字段或子字段的索引。 常見的有以下類型: 鍵索引、復合索引、多鍵索引、地理空間索引、全文本索引和哈希索引。

創建/刪除/隱藏

  1. MongoDB 使用 createIndex 方法來創建索引:`db.collection.createIndex(keys, options)`

    語法中 Key 值為你要創建的索引字段,1 為指定按升序創建索引,如果你想按降序來創建索引指定為 -1 即可。`db.col.createIndex({"a":1})`

    createIndex 方法中你也可以設置使用多個字段創建索引(關系型數據庫中稱作復合索引)。db.col.createIndex({"a":1,"b":-1})

  1. 刪除索引:db.collection.dropIndex

    刪除索引在底層直接刪除文件,然后修改元數據

  1. 從 4.4 開始支持隱藏索引db.collection.hideIndex()

    在刪除索引前,可以先隱藏索引,查看集群是否異常后,才真正刪除索引, 可有效幫助業務判斷索引是否可以刪除。

數據結構

底層文件存儲

MongoDB 底層是如何存儲數據的,一個 collection 一個文件嗎?索引在底層是如何組織的? 一個 collection 對應到底層存儲引擎就是一個文件,另外每個索引也是單獨的文件,每個數據和索引文件的默認結構是 b 樹,用戶建表的時候也可以指定 lsm 結構,不過絕大多數用戶基本都是使用 b 樹結構,本文的討論主要圍繞 b 樹這種結構來進行。

比如用戶建一個普通的表,默認會帶一個_id 索引,會產生倆個文件,一個文件存放數據,一個存放_id 索引,這倆個文件通過 RecordId 來連接,用戶每插入一條數據,mongo 會生成一條與之對應的自增的 RecordId, 不過用戶不感知,RecordId 是與 MySQL 中的自增主鍵類似。數據文件是 RecordId 到數據的映射, _id 索引文件是_id 到 RecordId 的映射,如果通過指定_id 查詢,會現在_id 索引文件中找到 RecordId, 然后再到數據文件中查詢數據,如果用戶再新建索引,那么在 wt 就會再新建一個文件,同樣按 b 樹組織,該文件記錄了索引到 RecordId 的映射,用戶使用索引查詢時,同樣的如同_id 索引,先找到 RecordId, 然后再到數據文件中查詢數據。

可以通過以下方式查找數據對應的RecordId PRIMARY> db.coll.find.showRecordId { "_id" : ObjectId("647861f72b531acaacf4afb2"), "a" : 1, "b" : 1, "$recordId" : NumberLong(1) } { "_id" : ObjectId("647861fa2b531acaacf4afb3"), "a" : 1, "b" : 2, "$recordId" : NumberLong(2) }

底層格式存儲

在 MongoDB 的 Schema-free 架構下,索引字段可以存儲不同類型的值,在索引 b 樹中,有個基本的問題,實現不同類型的比較呢? MongoDB 通過 BSON 結構來存儲數據,具體結構的解析可見BSON 結構解析 ,并且規定了不同類型之間的大小關系。

1. MinKey (internal type) 2. Null 3. Numbers (ints, longs, doubles, decimals) 4. Symbol, String 5. Object 6. Array 7. BinData 8. ObjectId 9. Boolean 10. Date 11. Timestamp 12. Regular Expression 13. MaxKey (internal type)

在這個限制下, 就只需要對比同種類型的大小了,BSON 的基本比較流程如下:先比較類型,如果類型一樣才使用 BSONElement::compareElements 比較值。

但是對于索引如果直接使用上述方法去做大小比較,具有以下的倆個缺點:

分享到:
標簽:MongoDB
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 52003

    網站

  • 12

    小程序

  • 1047590

    文章

  • 762

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定