Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

About Azure Table Storage Row 1MB Limit, How it counts for UTF8 Code?

Lets first quote:

Combined size of all of the properties in an entity cannot exceed 1MB. (for a ROW/Entity) from msdn

My Questions is: Since everything is XMLed data, so for 1MB, is 1MB of what, 1MB of ASCII Chars, or 1MB of UTF8 Chars, or something else?

Sample:

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

Is Row1 and Row2 same size (in length), or Row2.Length=Row1.Length+1?

like image 674
Eric Yin Avatar asked Jan 21 '12 04:01

Eric Yin


People also ask

How does Azure Table storage work?

Azure Table storage is a cloud-based NoSQL datastore you can use to store large amounts of structured, non-relational data. Azure Table offers a schemaless design, which enables you to store a collection of entities in one table. An entity contains a set of properties, and each property defines a name-value pair.

What is the maximum storage capacity of an azure Table?

There is no limit on file shares you can create within a premium account. In a Premium FileStorage account, storage size is limited to 100 TB. You can perform up to 100,000 I/O operations per second.

How much data can be stored in a single Table storage account in Azure?

A single storage account can store up to 500TB of data and like any other Azure service, users can take advantage of the pay-per-use pricing model.

What type of data does Azure Table storage store?

Azure Table storage is a service that stores non-relational structured data (also known as structured NoSQL data) in the cloud, providing a key/attribute store with a schemaless design. Because Table storage is schemaless, it's easy to adapt your data as the needs of your application evolve.


2 Answers

Single columns such as "Data" in your example are limited to 64 KB of binary data and single rows are limited to 1 MB of data. Strings are encoding into binary in the UTF8 format so the limit is whatever the byte size ends up being for your string. If you want your column to store more than 64 KB of data you can use a technique such as FAT Entity which is provided to you with Lokad (https://github.com/Lokad/lokad-cloud-storage/blob/master/Source/Lokad.Cloud.Storage/Azure/FatEntity.cs). The technique is pretty simple, you just encode your string to binary and then split the binary across multiple columns. Then when you want to read the string from the table, you would just re-join the columns again and convert the binary back to a string.

like image 191
RyanFishman Avatar answered Oct 21 '22 12:10

RyanFishman


Azure table row size calculation is quite involved and includes both the size of the property name and its value plus some overhead.

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

Edit. Removed statement that earlier said that size calculation was slightly inaccurate. It is quite accurate.

like image 43
hocho Avatar answered Oct 21 '22 12:10

hocho