Вопрос

Я хочу хранить массивы в Azure Table Entines. В настоящее время единственным типом массива, поддерживаемого именным, является байт-арай, ограниченная длиной 64 тыс. Длина. Размер достаточно, но я хотел бы хранить массивы длинных, парных и временных метров в сущности.

Я могу, очевидно, сам набрать несколько байтов в запрошенный тип, но мне было интересно, есть ли какая-либо практика для достижения этого.

Чтобы уточнить, это массивы с фиксированной длиной (например, 1000 ячеек), связанные с одним ключом.

Это было полезно?

Решение

Я пытался придумать хороший способ сделать это, кроме метода, который вы уже упоминали, и я в растерянности. Самое простое решение, которое я могу придумать, - это взять массив, бинарно сериализовать его и хранить в свойстве бинарного массива.

Другие варианты, которые я придумал, но отклонил:

  1. Если это важно хранить его, вы можете сохранить эту информацию в другом дочернем столе (я знаю, что таблицы Azure технически не имеют отношений, но это не значит, что вы не можете представлять этот тип вещей). Недостатком этого является то, что оно будет значительно медленнее, чем ваш оригинал.
  2. Возьмите массив, XML сериализуйте его и сохраните в свой свойство. Это будет означать, что вы могли бы увидеть содержимое вашего массива при использовании сторонних инструментов исследователей данных, и вы можете запустить (неэффективные) запросы, которые ищут точное соответствие содержимому массива.
  3. Использовать Lokad Cloud Fat Entities Чтобы сохранить ваши данные. По сути, это занимает ваш объект, бинарный сериализирует его и разбивает результаты на блоки 64 КБ через свойства табличного объекта. Это решает проблемы, подобные тем, которые вы испытываете, но вы сможете получить доступ только к своим данным, используя инструменты, которые поддерживают эту структуру.

Другие советы

Я написал клиента хранения таблиц Azure, называемый Lucifure Stash, который поддерживает массивы, перечисления, большие данные, сериализацию, публичные и частные свойства и поля и многое другое.

Вы можете получить это в http://www.lucifure.com или из Nuget.

Если у вас есть только коллекция ключей для хранения, то вы также можете Проверьте Azure Blobs. Отказ Они могут довольно эффективно хранить массивы до 25 метров точек во времени на одну каплю (со случайным доступом в наборе данных).

Если вы решите сохранить свой объект в хранилище Blob и нуждаетесь в более чем один «ключ», чтобы получить его, вы можете просто создать таблицу лазурных или два или n, где вы храните ключ, который вы хотите посмотреть, и ссылка на точную Blob вещь.

Почему бы вам не хранить значения как строки CSV?

Вы можете сериализовать свой массив в качестве строки JSON, используя сериализатор .NET JavaScript:http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

У этого класса есть свойство «MaxJsonLength», которое вы могли бы использовать, чтобы ваши массивы не превышали 64K, когда вы их сериализовали. И вы можете использовать один и тот же класс, чтобы десериализировать свои хранимые объекты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top