我讀過幾篇有關MongoDb中的索引的文章,但還沒有關於物理佈局的記錄。我習慣於談論關係數據庫中的聚集(非常快的基於物理的)和非聚集索引。 Mongo沒有這樣的條款,儘管他們的文檔提到了二級索引。默認情況下,它似乎通過_id主鍵創建索引可能對應於存儲上項目的物理順序。請解釋我:如果我爲每個表創建一個索引,它是否會根據索引自動將物品存儲在物理順序中?如果不是,我可以以某種方式設置它嗎?那麼_id呢,它是否默認符合物理順序?基於不同類型索引的Mongo中物品的物理順序 - ?
1
A
回答
3
MongoDB索引是B樹索引。索引塊分配在用於存儲文檔的相同數據文件內。目前(從MongoDB 2.2版開始),除了標準B樹索引之外,不支持任何其他索引類型。
編號:
的MongoDB沒有試圖下令在磁盤上的文件,也沒有放置B樹索引塊在任何特定的順序。 MongoDB使用內存映射文件來訪問磁盤上的數據結構。因此,哪些索引塊在RAM中以及哪些索引塊被分頁的問題被委託給OS內存管理系統。
編號:http://docs.mongodb.org/manual/faq/storage/
MongoDB的文件總是在磁盤連續的。任何文檔只能位於一個物理位置:從多個磁盤位置組裝文檔是不必要的。
MongoDB最初按照創建順序在磁盤上分配文檔。如果文檔增長超過其分配的大小(通過對添加新字段,子文檔或數組元素的文檔的更新),則文檔將被移動到磁盤上的新位置,該位置足夠容納新文檔。
刪除文檔將在分配的空間中創建'空洞':這些空洞被放置在空閒列表中,並且新文檔被插入到這些空洞中。因此,如果您對MongoDB集合執行重複的remove()和insert()操作,則文檔將以非常有序的方式分散在磁盤中。
特別是,文件將NOT以_id順序或以任何其他索引的順序排列在磁盤上。
有關MongoDB的存儲管理的更多信息,看看這些介紹:
相關問題
- 1. Plist中物品的順序
- 2. QMap和QMultiMap中物品的順序
- 3. 強類型的Viewbag物品
- 4. 從不同類別中選擇物品,包括沒有類別的物品
- 5. 獲取列表中物品的索引
- 6. CListCtrl獲取物品索引
- 7. 獲取物品索引(rownum)
- 8. 是否可以通過物品更改物品中父母/孩子的順序?
- 9. 更改所選物品索引的as3
- 10. 丟棄物品的最高索引
- 11. Ext.TabPanel物品處理程序
- 12. SQL Server聚集索引:(物理)數據頁面順序
- 13. 獲取REST中的物品清單時找不到的物品找到物品
- 14. 添加項目到不同產品類型的購物車
- 15. Java OOP - 物理引擎類型
- 16. PostgreSQL索引物理佈局
- 17. 從一組相同的物品獲取項目的索引
- 18. 如何訂購清單中的物品並刪除基於物業的重複物品?
- 19. RxJava2按順序排放物品
- 20. 關於物理引擎
- 21. 如何找到列表索引相同的物品
- 22. 基於人,物品和商店分組
- 23. 聚簇索引是否真的改變了記錄的物理順序?
- 24. Python類執行事物的順序
- 25. 基於物理標識的替代Hashtbl.hash
- 26. 大型物體的空間索引
- 27. 的Excel和類似物品
- 28. 數據類型爲物理
- 29. 獲取js物品的物品數量
- 30. 不同物品尺寸的RecyclerView網格