2013-02-15 15 views
2

我的mongoDB集合中的所有文檔都有一個整數數組。每個整數不需要多於32位,整數數組的長度對於每個文檔都是相同的。mongoDB是否無法存儲多個整數數組?

我的應用程序的客戶端將經常更新數組中的單個字段。

如果我有5000到10000個帶有256個整數數組的文檔,mongo db會浪費空間,因爲它需要爲我準備將數組內容更改爲非整數數據類型,或者更改數組長度?

與傳統的關係型數據庫相比,mongoDB的設計會不會更新我的數組中的單個整數?

假定我用更新數組語法形容這裏: http://docs.mongodb.org/manual/applications/update/#update-arrays

+0

修改後您的文檔會不斷增長,以至於他們必須從以前的相鄰空間移開? – Sammaye 2013-02-15 21:50:14

+0

@Sammaye no。每個數組的長度總是與其他數組的長度完全相同。對於這個問題中的例子,每個數組的圖片長度爲256.包含數組和其他字段的文檔的總大小也不會改變。 – 2013-02-15 21:51:56

+1

更新的最大問題是移動,考慮到你不會遇到這個問題,我估計你會很好地將這些放到一個子文檔中,並且應該在這裏看到很好的性能,特別是因爲它是256個元素,它們應該加載到內存運算符像$ pull等非常快 – Sammaye 2013-02-15 21:55:15

回答

1

將蒙戈DB浪費空間,因爲它需要準備給我我數組的內容更改爲非整數數據類型OR改變數組的長度?

不,它不會浪費空間。我沒有考慮更改數據類型或更改數組長度的能力,而是專注於MongoDB的padding factor,從而自適應地學習文檔是否趨於增長。由於您的文檔大小非常相似,因此您的填充因子將趨於1(即在文檔大小上幾乎不會添加額外的填充)。

與傳統的關係數據庫相比,mongoDB的設計會不會更新我的數組中的單個整數?

由於嵌入式陣列沒有一個確切的關​​系等效,比較不明顯。你可以假設關係等價物是JOIN。在這種情況下,我相信MongoDB的工作速度會更快,因爲JOIN會有自己的成本。


作爲附加說明,考慮到MongoDB可以處理的數據量,5,000到10,000個文檔是微不足道的。只要您在更新中指定了索引標準(例如_id),您就沒有任何空間或性能方面的考慮因素需要擔心。然而,由於您的文檔不是很小,我要注意的一件事就是試圖一次性在查找查詢中加載整個文檔,您可能更喜歡project find queries僅限特定字段;在查詢數組時,您可能需要考慮$slice

+0

由於數組操作在內存中並且JOIN操作在索引上在性能方面略有可比性。 – Sammaye 2013-02-15 22:53:06

+0

@Sammaye謝謝,我已經更新了我的答案。儘管在效率方面我認爲這不是一個明顯的比較。不過,我認爲根據所描述的具體情況,它必須比關係更快? – 2013-02-15 23:02:35

+2

事實上,我同意,這個特定的場景應該更快地將數組加載到工作集中並操作它,而不是在磁盤上就地更新的JOIN上的範圍索引 – Sammaye 2013-02-15 23:04:15