1. 程式人生 > >MongoDB:17-MongoDB-索引限制及其他限制規則

MongoDB:17-MongoDB-索引限制及其他限制規則

索引-額外開銷

  1. 每個索引佔據一定的儲存空間,在進行插入,更新和刪除操作時也需要對索引進行操作。
  2. 所以,如果你很少對集合進行讀取操作,建議不使用索引。

索引-記憶體(RAM)使用

  1. 由於索引是儲存在記憶體(RAM)中,你應該確保該索引的大小不超過記憶體的限制。
  2. 如果索引的大小大於記憶體的限制,MongoDB會刪除一些索引,這將導致效能下降

索引-查詢限制

  1. 索引不能被以下的查詢使用:
    • 正則表示式及非操作符,如 $nin, $not,等。
    • 算術運算子,如 $mod,等。
    • $where 子句
  2. 所以,檢測你的語句是否使用索引是一個好的習慣,可以用explain來檢視。

索引鍵限制

  1. 2.6版本開始,如果現有的索引欄位的值超過索引鍵的限制,MongoDB中不會建立索引。

插入文件超過索引鍵限制

  1. 如果文件的索引欄位值超過了索引鍵的限制MongoDB不會將任何文件轉換成索引的集合。
  2. mongorestoremongoimport工具類似。

索引-最大範圍限制

  1. 1、索引關鍵字:該欄位的取值不能超過1024位元組,否則不能新增到一個索引中。
  2. 2、集合的最大所有個數:64
  3. 3、索引名稱長度:包括資料庫於集合名稱總共不超過125字元。
  4. 4、聯合索引最大欄位個數:31
  5. 5、不能聯合使用text索引與其他型別索引
附錄:
  1. 一、BSON 文件
  2. 1BSON文件大小,最大限制為
    16MB,這種限制是為了確保單個文件不會使用過多的RAM,或者在遷移期間不會佔用過多的頻寬。為了儲存大於該限制的文件,mongodb提供了GridFS
  3. 當插入的文件大於16MB時將得到如下的錯誤資訊(java客戶端):
    1. com.mongodb.MongoInternalException:DBObject of size 30836631 is over Max BSON size 16777216
  4. 2文件的最大巢狀數100
  5. 二、名字空間
  6. 1、名字空間長度限制:包括資料庫與集合名稱,總共不能超過123位元組
  7. 2、名字空間數量:
    1. mongo為每個資料庫儲存一個16MB的名字空間檔案,dbname.ns ,每個名稱佔用
      628位元組,
    2. 因此預設可以支援24000個名字空間(索引也佔用一個名字空間)。
  8. 3、名字空間檔案大小:最大不超過2048MB,預設為16MB,可以使用nssize選項進行配置。
  9. 三、索引
  10. 1、索引關鍵字:該欄位的取值不能超過1024位元組,否則不能新增到一個索引中。
  11. 2、集合的最大所有個數:64
  12. 3、索引名稱長度:包括資料庫於集合名稱總共不超過125字元。
  13. 4、聯合索引最大欄位個數:31
  14. 5、不能聯合使用text索引與其他型別索引
  15. 四、帽子集合(CappedCollections
  16. 1、帽子集合的最大文件數:當在建立時候執行最大文件數引數時,該值必須小於232次方。
  17. 若在建立的時候沒有指定則文件數不限制。
  18. 五、複製集
  19. 1、最大的複製集個數:12
  20. 2、複製集的投票成員個數:任何時刻最大隻有7個成員擁有投票權
  21. 六、分片叢集
  22. 1、在分片環境中不支援的操作:groupeval$where $isolated $snapshot geoSearch
  23. 2、已存在資料的分片:對於已存在資料的集合,分片的最大支援資料為256GB.在叢集環境之中最大支援的分片集合大約為400GB。精確的閾值根據chunk於資料大小而定。(也就是說,如果要對已有的集合進行分片,那麼要在其增長到256G之前進行)。
  24. 3、分片集合中的文件更新:所有updateremove操作必須包括分片關鍵字或者id欄位作為查詢欄位。若沒有這些欄位將失敗。
  25. 4、分片集合中的唯一索引:除非唯一索引關鍵字使用shard key作為字首,否則不支援。當使用shardkey作為字首時,mongo將強制整個key唯一,而非單一欄位。具體可參考:http://docs.mongodb.org/manual/tutorial/enforce-unique-keys-for-sharded-collections/
  26. 七、分片關鍵字限制
  27. 1、關鍵字不能超過512位元組。
  28. 2、關鍵字不允許變更:若要修改可採用如下方式:
  29. 1)匯出所有資料到另外的格式
  30. 2)刪除原來的分片集合
  31. 3)配置新的分片關鍵字
  32. 4)預先分割關鍵字範圍確保實現分散式
  33. 5)儲存匯出的資料到mongo之中。
  34. 3、關鍵字值不允許修改:當一個文件已經插入到分片集合中後,涉及到分片關鍵字的欄位不允許update
  35. 4、單調遞增/遞減的分片關鍵字會限制插入效率:
  36. 如果使用_id欄位作為分片關鍵字,由於該欄位根據time遞增,因此這也是一個會影響插入效率的。當向單調遞增或遞減的分片關鍵字集合中插入資料時,所有的插入將會匯入到同一個chunk同一個分片之中。
  37. 加入在叢集中以讀取和更新佔據主導,則這種限制並不影響叢集。
  38. 為了避免這種限制,使用一個雜湊分片關鍵字或者選擇一個非單調遞增遞減的欄位。
  39. 八、操作
  40. 1、聯合多個$in操作:
    1. 聯合多個in表示式,將可能觸發聯合索引的合併限制。
    2. 如果符合的item大於等於4000000mongo將產生“combinatorial limit of $in partitioning of result set exceeded錯誤。
  41. 九、命名限制
  42. 1、資料庫名稱是大小寫區別的:同時mongo也不允許兩個資料庫名稱僅僅為大小寫區別。
  43. 2、在windows下的資料庫名稱限制:/\. "*<>:|?並且不能包括空格符。
  44. 3、在UnixLinux下的資料庫名稱限制:/\. "同樣不能包括空格符。
  45. 4、資料庫名稱長度:64位元組
  46. 5、集合名稱限制:
  47. 必須以下劃線或者字母開頭,並且不能包括 $,引號,空格符,點號
  48. 6、欄位名稱限制:
  49. 不能包括點號,$,與空格符。

參考來源:http://www.cnblogs.com/chang290/p/3437527.html

相關推薦

MongoDB17-MongoDB-索引限制及其限制規則

索引-額外開銷 每個索引佔據一定的儲存空間,在進行插入,更新和刪除操作時也需要對索引進行操作。所以,如果你很少對集合進行讀取操作,建議不使用索引。 索引-記憶體(RAM)使用 由於索引是儲

MongoDB16-MongoDB-索引陣列欄位和索引子文件欄位

MongoDB允許深入文件內部,對巢狀欄位和陣列建立索引;巢狀物件和陣列欄位可以和複合索引中的頂級欄位一起使用,多數情況下與“正常”索引欄位的行為也是一致的。考慮以下文件集合(use

MongoDB12-MongoDB 資料庫引用(DBRefs vs 手動引用)

資料庫引用的意義: mongodb中資料的掃描是按行來掃描的,這意味著如果有一個欄位的值長度很長,mongodb不會自動跳過而是將整個文件掃描一遍,當資料量十分密集而這個很長的欄位不需要經

MongoDB14-MongoDB- 原子操作

Redis採用的是非同步I/O非阻塞的單程序模型,每一條Redis命令都是原子性的。那麼mongoDB呢? mongo有哪些原子操作呢?有哪些實現事務性操作的技巧呢? Mo

Android實戰Toast訊息顯示位置及其設定

  Toast的用法非常簡單,通過靜態方法makeText()創建出一個Toast物件,然後呼叫show()將Toast顯示出來就可以了。這裡需要注意的是,makeText()方法需要傳入三個引數。第一個引數是Context,也就是Toast要求的上下文,由於活動本身就

4.非關系型數據庫(Nosql)之mongodb普通索引,唯一索引

log 索引 xpl sys watermark lang mon style gravity  一:普通索引 1創建一個新的數據庫 > use toto; switched to db toto

Node.js+Express+MongoDB 建站例項——上傳圖片及其模組

本專案為系列部落格,目前有以下系列 其他模組 由於上兩篇文章中已經將如何往資料庫中插入、修改資料等做了演示,因此這篇文章就不再重複了,主要記錄一些開發時遇到的問題及解決方案(具體實現方法看原始碼)。 1、 這邊推薦使用postman進行介面測試,pos

Spring boot 啟動報錯com.mongodb.MongoSocketOpenException: Exception opening socket

clas cati helper res connect ava bstr efault def   詳細錯誤信息: com.mongodb.MongoSocketOpenException: Exception opening socket at com.mongodb.

Ruby操作MongoDB(進階六)-索引Indexing

index create drop ruby list 在本博文中,我們主要介紹數據庫索引。主要包含創建索引,刪除索引,列出索引數據庫驅動提供了在集合上創建,刪除和查看索引的方法。創建索引 創建索引的操作中,可以一次創建一個索引,也可以一次創建多個索引。在3.0及其以上版本的MongoD

易趣使用MongoDB創建關鍵業務的多數據中心應用

保持 企業級 密度 讀取 src 美國 周期 成熟 全球 eBay:使用MongoDB創建關鍵業務的多數據中心應用 作為全球前十的零售品牌,eBay的活躍用戶有一億七千多萬,並擁有跨越全世界190個市場的10億購物清單,這樣的規模下,eBay絕對不允許出現宕機的情況。這也就

3-MongoDB 查詢(一)

簡單 gte ted 分享圖片 string font 投影 binary ava 一、簡介 MongoDB提供了db.collection.find() 方法可以實現根據條件查詢和指定使用投影運算符返回的字段省略此參數返回匹配文檔中的所有字段。 二.db.co

MongoDB數據庫索引

lai 不包含 dup 占用 當前 integer title 就是 oca 索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數據時必須掃描集合中的每個文件並選取那些符合查詢條件的記錄。這種掃描全集合的查詢效率是非常低的,特別在處理大量的數據

求接題目輸入一個字符串輸出大小寫數字及其字符的個數並逆序輸出

v2v SQ 逆序輸出 Go 大小寫 target clu 數字 targe 9wwwp0b5mw啥睪約抑汕丶防內肯勸《http://weibo.com/p/230927987600061628162048》 rvzxpb9vfd腫氨撩都幣渦綽腔腳備《http://wei

SpringBoot學習筆記(10)使用MongoDB來訪問數據

and exclude 包含 思維導圖 .org args 表示 告訴 http SpringBoot學習筆記(10):使用MongoDB來訪問數據 快速開始   本指南將引導您完成使用Spring Data MongoDB構建應用程序的過程,該應用程序將數據存儲在Mong

MongoDB 通過ReadConcern 來處理備庫一致讀的問題

問題描述 MongoDB的寫請求寫入Primary, secondary從Primary自動獲取並且應用oplog來保持和主庫的同步, MongoDB 允許使用者從Primary 或者 secondary 讀取資料(由客戶端ReadPreference 決定)。但讀資料可能存在以下問題: 使用者從s

SpringBoot專案開發(二十二)SpringBoot MongoDB實現副本集(讀寫分離)

1.MongoDB可以單庫、主從(官方現已不推薦)、副本集、分片加副本集,通過分片加副本集可以組成龐大的資料儲存叢集,而大部分專案使用副本集就能滿足需求了 2.MongoDB副本集(Replica Set):有自動故障恢復功能的主從叢集,有一個Primary節點和一個或多個Secon

1安裝MongoDB

1.安裝MongoDB(官網)         - 安裝         - 配置環境變數       

MongoDB的地理位置索引

背景 我們平常開啟一些App的時候,經常有一個“查詢周邊景點”的功能,如我在高德里面就查詢到了附近的景點。 這種計算如果通過普通的關係型資料庫,那對伺服器和資料庫的效能要求就太高了。 我們可以通過MongoDB自帶的地址位置索引來實現。 如何使用 前期準備:插入資

nodejs漸入佳境[17]-mongodb資料庫入門

下載mongodb https://www.mongodb.com mongod 解壓,進入bin目錄 12 //-dbpath代表資料放置在哪裡./mongod -dbpath /Users/jackson/Downloads/mongodb-data

淺嘗輒止MongoDB基礎

        大部分摘自《MongoDB大資料處理權威指南》(第3版)。  一、簡介         MongoDB(源自單詞humongous)是一個只用於處理文件的資料庫。不同於關係資料庫管理系統(Relational Database Management Sys