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

时间:2012-01-21 04:36:08

标签: azure azure-table-storage

让我们先引用:

  

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

我的问题:由于所有内容都是XML数据,因此1MB,1MB的ASCII字符,1MB的UTF8字符或其他东西?

示例

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

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

2 个答案:

答案 0 :(得分:12)

示例中的单个列(如“数据”)限制为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实体等技术。该技术非常简单,您只需将字符串编码为二进制,然后将二进制文件拆分为多列。然后,当您想要从表中读取字符串时,您只需再次重新连接列并将二进制文件转换回字符串。

答案 1 :(得分: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

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