#azure #nosql #azure-storage #azure-table-storage
#azure #nosql #azure-хранилище #azure-table-storage
Вопрос:
Я хотел бы иметь возможность хранить объекты, у которых есть дочерние объекты, в хранилище таблиц Azure, используя структуру, подобную такой:
public class AzureTestDocument : TableServiceEntity
{
public AzureTestDocument(int counter)
: base("_default", counter.ToString())
{
Counter = counter;
Child = new AzureTestChildDocument(counter);
}
public int Counter { get; set; }
}
public class AzureTestChildDocument
{
public AzureTestChildDocument(int counter)
{
Counter = counter;
}
public int Counter { get; set; }
}
Сохранение родительского документа при удалении дочернего документа работает нормально. Сохранение подобной структуры приводит к исключению «Один из входных данных запроса недопустим». Немного погуглив, я обнаружил эту статью о поддерживаемых типах, что может означать, что вы не можете внедрять какие-либо типы, кроме этого короткого списка поддерживаемых.
Пожалуйста, уточните, так ли это, или укажите мне, чего я, возможно, не понимаю.
Ответ №1:
Хранилище таблиц Azure поддерживает сохранение объектов, содержащих только примитивные свойства. Любые вложенные дочерние объекты необходимо сохранять отдельно:
Вы можете сериализовать дочерние объекты в строки и сохранить эти строки как свойства.
Кроме того, вы можете сохранить эти дочерние объекты в виде отдельных строк в таблицах Azure
В качестве альтернативы, если вы имеете дело с документами, вы можете сохранить эти объекты в хранилище больших двоичных объектов Azure.
Комментарии:
1. Вместо сериализации в строку вы могли бы просто сохранить байты, поскольку поддерживается массив байтов. Однако, если он будет больше 64 кб, то сохранение документа в хранилище больших двоичных объектов было бы правильным решением.
2. Максимальный размер объекта table (который включает все свойства) составляет 1 МБ. Но таблицы Azure также поддерживают тип данных byte[], поэтому теоретически туда можно «внедрить» любой документ. Дополнительная информация о таблицах Azure: msdn.microsoft.com/en-us/library/windowsazure/dd179338.aspx
3. Я наткнулся на FatEntities , которые кажутся еще одним инструментом, помогающим включить дополнительные данные. Спасибо за разъяснение!