2013-04-07 86 views
2

在MongoDb中,ObjectId是一個12字節的BSON類型。Objectid的更改大小

有什麼辦法可以減小objectID的大小嗎?

+0

也許我不明白你的問題,但減少它如何?它被設計成一種簡單而有效的方式來獲得在多機器設置中定義的唯一標識符:一個4字節的值,表示自Unix紀元以來的秒數,一個3字節的機器標識符,一個2字節的進程ID,以及一個3字節的計數器,從一個隨機值開始。 – WiredPrairie 2013-04-07 18:22:13

+1

這是不可能的,但你可以使用一個整數作爲_id而不是ObjectId來只使用4個字節。 – assylias 2013-04-07 19:07:53

+0

你使用什麼語言,驅動程序和映射框架(如果有的話)? – Sim 2013-04-08 02:23:25

回答

2

不是。這是一個BSON數據類型。這就像是要求一個32位整數自己縮小一樣。每個對象都必須有_id屬性,但您並不限於ObjectId

+1

增加:MongoDB集合中的每個頂級*文檔*都必須有一個_id作爲主鍵。當此屬性未在代碼中設置時,它由驅動程序或數據庫自動分配。 – WiredPrairie 2013-04-07 18:25:34

0

MongoDB集合中的每個文檔都需要有一個唯一的_id,但該值不一定是ObjectId。因此,如果你正在尋找減少您的收藏文件的大小,你有兩個選擇:

  1. 選擇文檔的獨特性能之一,並把它作爲_id領域。例如,如果您有一個帳戶集合,其中外部提供的帳戶ID是您數據模型的一部分,您可以將該帳戶ID存儲在_id字段中。

  2. 自己管理集合的主鍵。許多驅動程序支持自定義primary key factories。正如@assylias所建議的那樣,使用int可以節省空間,但是,如果您可以使用模型中的某個字段作爲_id,您將使用更多的空間。

順便說一句,_id字段的值可以是複合的:您可以使用Object/hash/map/dictionary。例如,參見this SO question

如果您在Mongo上使用某種類型的對象/模型框架,我會小心使用(1)。有些框架很難與開發人員重寫id代。例如,我在Ruby中對Mongoid有不好的體驗。在這種情況下,(2)可能是更安全的方式,因爲發生在驅動程序層。