2012-09-21 15 views
1

我讀過幾篇有關MongoDb中的索引的文章,但還沒有關於物理佈局的記錄。我習慣於談論關係數據庫中的聚集(非常快的基於物理的)和非聚集索引。 Mongo沒有這樣的條款,儘管他們的文檔提到了二級索引。默認情況下,它似乎通過_id主鍵創建索引可能對應於存儲上項目的物理順序。請解釋我:如果我爲每個表創建一個索引,它是否會根據索引自動將物品存儲在物理順序中?如果不是,我可以以某種方式設置它嗎?那麼_id呢,它是否默認符合物理順序?基於不同類型索引的Mongo中物品的物理順序 - ?

回答

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的存儲管理的更多信息,看看這些介紹: