2012-01-21 37 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

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