Azure Table InsertOrMerge Upsert: можно ли динамически создать объединяемый объект?

Мне нужно объединить динамический список свойств с тем, что уже сохранено в таблице Azure. Из моего исследования «upsert» с «вставить или объединить» - правильный подход.

  • Как заставить язык C# разрешить сохранение динамического списка свойств?

  • Является ли редактирование необработанного XML единственным способом добиться этого?


Дополнительная информация об Upsert и InsertOrMerge доступна здесь


Дополнительная информация по моей конкретной проблеме

Я использую объект Entity для отслеживания массива длиной N, где N ‹ 240 (255 — максимальное количество свойств, доступных в таблице Azure). Каждой позиции в массиве соответствует такое имя свойства:

 /* Note: Each number is prefixed by "a" since properties can't start with a number and I like it when all properties have the same length */

public class MyFatEntity
{

public string A01 {get;set;}

public string A02 {get;set;}

// ..

public string A10 {get;set;}

// ..

public string AF0 {get;set;}

}

Мне нужна возможность сопоставить строку с любой конкретной позицией массива. Я планирую использовать проекцию с этим.

Одна проблема, которую я предвижу, заключается в том, что если я создам большой толстый объект с 240 свойствами, то я потребляю пропускную способность хранилища и создаю неэффективность, которая не должна существовать.

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


person halfbit    schedule 28.08.2012    source источник


Ответы (1)


Я написал клиент с открытым исходным кодом Lucifure Stash, доступный на CodePlex и через NuGet, который позволит вам сохранить массив в хранилище таблиц Azure, по одному элементу массива на столбец.

Lucifure Stash также поддерживает динамические свойства через словарь и идеально подходит для «вставки-слияния». (CodePlex)

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

person hocho    schedule 06.09.2012