我讀過幾篇有關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. CListCtrl獲取物品索引
- 5. 獲取物品索引(rownum)
- 6. 是否可以通過物品更改物品中父母/孩子的順序?
- 7. 丟棄物品的最高索引
- 8. 更改所選物品索引的as3
- 9. Ext.TabPanel物品處理程序
- 10. SQL Server聚集索引:(物理)數據頁面順序
- 11. 添加項目到不同產品類型的購物車
- 12. Java OOP - 物理引擎類型
- 13. PostgreSQL索引物理佈局
- 14. 從一組相同的物品獲取項目的索引
- 15. 如何訂購清單中的物品並刪除基於物業的重複物品?
- 16. 關於物理引擎
- 17. 基於人,物品和商店分組
- 18. 聚簇索引是否真的改變了記錄的物理順序?
- 19. Python類執行事物的順序
- 20. 獲取js物品的物品數量
- 21. 不同產品的購物車
- 22. 不同物品尺寸的RecyclerView網格
- 23. 數據類型爲物理
- 24. 如何從物品列表中獲取物品類型和成員?
- 25. 索引類物體插入的solr
- 26. 鑑於一個集合獲取物品的類型(Java)
- 27. 檢索Firebase中的物品行?
- 28. 使用laravel crinsane購物車搜索購物車中的商品
- 29. 如何加快基於Simscape的物理模型的仿真?
- 30. 如何從Source中獲取物品的順序?