关于Azure表存储行1MB限制,它如何计算UTF8代码?

Eri*_*Yin 11 azure azure-table-storage

让我们先报价:

实体中所有属性的组合大小不能超过1MB.(来自msdn的ROW/Entity)

我的问题是:由于所有内容都是XML数据,因此对于1MB,是1MB的内容,1MB的ASCII字符,或1MB的UTF8字符,还是别的什么?

样品:

Row1: PartitionKey="A', RowKey="A", Data="A"
Row2: PartitionKey="A', RowKey="A", Data="?"  (this is a UTF8 unicode A)
Run Code Online (Sandbox Code Playgroud)

Row1和Row2的大小(长度)是一样的,还是Row2.Length=Row1.Length+1

Rya*_*man 12

单个列(例如示例中的"数据")限制为64 KB二进制数据,单行限制为1 MB数据.字符串以UTF8格式编码为二进制,因此限制是字符串大小最终为您的字符串.如果您希望列存储超过64 KB的数据,您可以使用Lokad为您提供的FAT Entity等技术(https://github.com/Lokad/lokad-cloud-storage/blob/master/ Source/Lokad.Cloud.Storage/Azure/FatEntity.cs).该技术非常简单,您只需将字符串编码为二进制,然后将二进制文件拆分为多列.然后,当您想要从表中读取字符串时,您只需再次重新连接列并将二进制文件转换回字符串.

  • 在Azure表存储中将字符串编码为UTF8的信息不正确.它是UTF16.这会带来巨大的变化. (9认同)
  • UTF8编码不一定是ASCII编码的两倍.事实上,如果您的字符在0-128的ASCII范围内,则编码最终会达到相同的大小.您应该查看UTF8的编码方式. (3认同)

hoc*_*cho 10

Azure表行大小计算非常复杂,包括属性名称的大小及其值加上一些开销.

http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/30/how-the-size-of-an-entity-is-caclulated-in-windows-azure-table-storage.aspx

编辑.删除了早先声称尺寸计算稍微不准确的声明.这很准确.