mongodb如何根据字段(数组类型)的长度排序_大数据存储技术选型(七)——MongoDB设计模式及索引优化...
關系數據庫的時代
關系數據庫的設計理念
假設你有一臺車,你需要給它存起來,給它找個停車位。傳統數據庫的存儲方式就相當于,把這個車的所有零件拆下來,放在存放對應零件的盒子里,需要用的時候,再把他們取出來組裝。這種方式的存儲數據一個最顯而易見的好處就是節省空間~
關系型數據庫存儲數據MongoDB的設計理念
然而,MongoDB存儲數據的方式則截然不同。同樣是上面的停車的例子,這回需要停這輛車的時候,我們就直接把它懟進車庫里,取的時候直接就開走了。這樣的存儲數據的方式的好處是方便隨時快捷地存取,但是會犧牲一些存儲空間。
MongoDB的存儲理念索引原理
在MongoDB中主要有五種類型的索引,即單字段索引(Single-field Indexes)、復合索引(Compound Indexes)、多鍵索引(Multikey Indexes)、地理位置索引(Geospatial Indexes)和全文索引(Text Indexes)。
數據結構與算法復習
由于B樹/B+樹的工作過程過于復雜,我們用數組來理解它。假設索引為{a:1}(aASC):
db.table.insert({a: 1}) [1]
db.table.insert({a: 10}) [1, 10]
db.table.insert({a: 5}) [1, 5, 10]
db.table.insert({a: 7}) [1, 5, 7, 10]
db.table.insert({a: 3}) [1, 3, 5, 7, 10]
如上面工作過程所示,
1、數據增加/刪除時始終保持被索引字段有序
2、數組插入效率太低,但B樹可以輕(fu)松(za)實現
3、在有序結構上實施二分查找,可實現O(log2(n))高效搜索
Big O Notation——大O符號理解復合索引
假設索引為{a: 1, b: 1} (a ASC, b ASC):
db.table.insert({a: 1, b: 1}) [{a: 1, b: [1]}]
db.table.insert({a: 1, b: 10}) [{a: 1, b: [1, 10]}]
db.table.insert({a: 5, b: 10}) [{a: 1, b: [1, 10]}, {a: 5, b: [10]}]
db.table.insert({a: 5, b: 7}) [{a: 1, b: [1, 10]}, {a: 5, b: [7, 10]}]
復合索引的創建就是這樣一種層層嵌套的方式去建立的。
我們查詢數據的時候,也是在各個對應的層級中找到索引所對應的數據。
復合索引的工作模式——過濾
我們通過下面的三張圖來了解一下復合索引如何找到相應的數據頁吧
如上圖所示,我們可以查找數據時,就可以在已建好的索引上,通過不同節點的跳轉,找到對應的數據頁,再而找到對應數據頁上的相關數據。
復合索引的工作模式——排序
由此可知,我們選擇不同的排序方式,也會造成檢索的數據頁的范圍不一樣。
復合索引的工作模式——索引順序的影響
我們通過不同的檢索索引的順序,對數據進行查詢,因為檢索跳轉的路徑不一樣,從而造成查詢效率不一樣。
我們根據不同的索引執行策略,來進行索引的優化,從而提高查詢效率。
總結
以上是生活随笔為你收集整理的mongodb如何根据字段(数组类型)的长度排序_大数据存储技术选型(七)——MongoDB设计模式及索引优化...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑二维码怎么扫描_扫描模组方案是如何满
- 下一篇: 企业选择 多云管理平台 六大注意事项