О области хранения таблиц Azure 1MB Limit, как это рассчитывается для кода UTF8?

Позволяет выполнить первую цитату:

Совместимый размер всех свойств в сущности не может превышать 1 МБ. (для ROW/Entity) из msdn

Мои вопросы: поскольку все данные XMLed, поэтому для 1 МБ - 1 МБ, 1 МБ ASCII-символов или 1 МБ символов 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?

Ответ 1

Отдельные столбцы, такие как "Данные" в вашем примере, ограничены 64 Кбайтами двоичных данных, а отдельные строки ограничены 1 МБ данных. Строки кодируются в двоичные файлы в формате UTF8, поэтому предел - это то, что размер байта заканчивается для вашей строки. Если вы хотите, чтобы в вашем столбце хранилось более 64 КБ данных, вы можете использовать такую ​​технику, как FAT Entity, которая предоставляется вам с помощью Lokad (https://github.com/Lokad/lokad-cloud-storage/blob/master/Source/Lokad.Cloud.Storage/Azure/FatEntity.cs). Техника довольно проста, вы просто кодируете свою строку в двоичную, а затем разбиваете двоичный файл на несколько столбцов. Затем, когда вы хотите прочитать строку из таблицы, вы просто снова присоедините столбцы и преобразуете двоичный файл обратно в строку.

Ответ 2

Расчет размера строки 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

Изменить. Убрано выражение, в котором ранее говорилось, что расчет размера был немного неточным. Это довольно точно.