亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么在MongoDB中索引的方向很重要

為什么在MongoDB中索引的方向很重要

子衿沉夜 2019-05-11 07:07:23
為什么在MongoDB中索引的方向很重要
查看完整描述

2 回答

?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

MongoDB以某種方式連接復合密鑰,并將其用作BTree中的密鑰。
在找到單個項目時-樹中節點的順序無關。
如果要返回一系列節點-相互靠近的元素將沿著同一棵樹的枝條向下移動。節點在此范圍內越近,其檢索速度就越快。
單字段索引-命令不重要如果它們在提升順序上接近在一起,它們也將以降序緊密地在一起。
當你有一個復合鑰匙-命令開始起作用了。
例如,如果鍵為A升序B,索引可能如下所示:
Row A B1 1 12 2 63 2 7 4 3 45 3 56 3 67 5 1

對A、升序B降序的查詢將需要跳過索引,以返回行,并且速度更慢。例如,它將返回行1, 3, 2, 6, 5, 4, 7
與索引相同的Range查詢將按正確的順序順序返回行。
在BTree中查找記錄需要O(log(N))時間。按順序查找記錄范圍僅為OLog(N)+k,其中k是要返回的記錄數。




查看完整回答
反對 回復 2019-05-12
?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

mongodb在前臺直接運行建立索引命令的話,將造成整個數據庫阻塞,因此索引建議使用 background 的方式建立。但是這也會帶來一定的問題,在
2.6 版本之前,在 secondary server 中即使使用 background 方式建立索引,secondary 還是會以
foreground 方式建立索引,它導致 secondary 同樣引發數據庫阻塞問題。2.6 版本修復了這個 Bug,2.6 版之后使用
background 方式建立索引時,真正轉向后臺運行了。
為了盡量降低建立索引對 MongoDB Server 的影響,有一種方法是把 MongoDB Server 轉換成 standalone 模式后建立。具體做法如下:
1.首先把 secondary server 停止,在取消 --replSet 參數,并且更改 MongoDB port 之后重新啟動 MongoDB,這時候 MongoDB 將進入 standalone 模式;
2.在 standalone 模式下運行命令 ensureIndex 建立索引,建議使用 foreground 方式運行;
3.建立索引完畢之后關閉 secondary server 按正常方式啟動;
4.根據上述 1~3 的步驟輪流為 secondary 建立索引,最后把 primary server 臨時轉換為 secondary server,同樣按 1~3 的方法建立索引,再把其轉換為 primary server。
這種方式還是比較麻煩的,但可以把建立索引操作對 MongoDB 的影響降到最低,在有些情況下還是值得做的。



查看完整回答
反對 回復 2019-05-12
  • 2 回答
  • 0 關注
  • 600 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號