2012-01-21 49 views
11

第一個報價:關於Azure表存儲行1MB限制,它如何計算UTF8代碼?

實體中所有屬性的組合大小不能超過1MB。 (對於行/實體)從msdn

我的問題是:既然一切都XMLed數據,所以對於1MB,是什麼1MB,ASCII字符數的1MB,或UTF8字符數的1MB,或者說其他?

樣品

Row1: PartitionKey="A', RowKey="A", Data="A" 
Row2: PartitionKey="A', RowKey="A", Data="A" (this is a UTF8 unicode A) 

是ROW1和行2相同的尺寸(長度),或Row2.Length=Row1.Length+1

+0

我找到了我的答案Row2.Length = Row1.Length + 1 –

回答

12

在您的示例中,「Data」等單列僅限於64 KB的二進制數據,單行限於1 MB的數據。字符串以UTF8格式編碼爲二進制文件,所以限制是字節大小最終爲您的字符串。如果您希望列存儲超過64 KB的數據,則可以使用Lokad(https://github.com/Lokad/lokad-cloud-storage/blob/master/Source/Lokad.Cloud.Storage/Azure/FatEntity.cs)向您提供的FAT實體等技術。該技術非常簡單,只需將字符串編碼爲二進制文件,然後將二進制文件分割爲多個列。然後,當你想從表中讀取字符串時,只需再次重新加入列並將二進制轉換回字符串即可。

+0

您的意思是,如果ASCII碼,我可以保存1M個字符,但對於UTF8 Code,我只能保存一半? –

+3

UTF8編碼不一定是ASCII編碼大小的兩倍。事實上,如果你的字符在0-128的ASCII範圍內,那麼編碼結果是相同的大小。您應該查看UTF8的編碼方式。 – RyanFishman

+0

所以如果我保存亞洲人物,我只能保存純英文的一半大小?右 –