Массивы в объектах хранения таблиц Azure (не байтовых) - PullRequest
3 голосов
/ 30 ноября 2010

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

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

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

Ответы [ 6 ]

4 голосов
/ 23 февраля 2012

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

Вы можете получить его по адресу http://www.lucifure.com или от NuGet.

3 голосов
/ 01 декабря 2010

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

3 голосов
/ 01 декабря 2010

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

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

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

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

0 голосов
/ 04 июля 2013

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

Этот класс имеет свойство "MaxJsonLength", которое можно использовать, чтобы убедиться, что размер массивов не превышает 64 КБих сериализовали.И вы можете использовать тот же класс для десериализации ваших сохраненных объектов.

0 голосов
/ 10 сентября 2011

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

...