2012-06-18 54 views
1

我有很多目標與語言代碼的一個關鍵領域。由於Java和Mongodb本身都使用UTF-8,並且由於語言代碼是ASCII,因此它們應該每字符加1個字節加\ 0終止符。因此,語言代碼「en」在BSON對象和索引中只應佔用3個字節。我可以通過將ASCII字符串轉換爲字節來節省我的Mongodb索引中的空間嗎?

這是正確的嗎?我想知道我是否通過轉換我的領域爲一個字節數組像保存任何:保存它們與Java驅動程序MongoDB的前

byte[] lcBytes = langCode.getBytes("ISO-8859-1"); 

回答

3

根據該bson spec,它不會使一個區別:

string ::= int32 (byte*) "\x00" 
binary ::= int32 subtype (byte*) 

換句話說,該字符串是零結尾(因此浪費一個字節),而二進制需要一個字節的子類型領域。

當然,一個完美的匹配字符集可能是在字節數組更有效率本身可以更小(例如不要求您需要經常一個字符三個字節,但只有一個)。話又說回來,我幾乎認爲這是值得的麻煩,因爲它使得它無法使用正則表達式,地圖/減少,JS功能等也許非常arcance字符集,但8859是不是太特殊。

作爲旁註,請記住,index size is limited to about 1k,所以你不能在索引中扔很長的字符串(並且這不是一個好的主意在性能方面)。

如果你只需要通過平等查詢,也許你可以選擇一個哈希呢?如果你需要存儲非常大的字符串(非索引),壓縮算法可能是一個好主意。

相關問題