Как внедрить документы в хранилище таблиц Azure

#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 , которые кажутся еще одним инструментом, помогающим включить дополнительные данные. Спасибо за разъяснение!