#c# #azure
#c# #azure
Вопрос:
У меня есть несколько тысяч изображений известных произведений искусства, хранящихся в хранилище контейнеров Azure. С каждым изображением связана некоторая информация об оформлении, например, название, исполнитель, год и т.д. В настоящее время эта информация хранится в табличном хранилище Azure, где я выполняю поиск на основе идентификатора изображения. Однако было бы лучше (с точки зрения производительности и наилучшей практики) сохранить эту информацию в виде данных атрибута для изображения, а затем вызвать?:
var myAttributes = myBlockBlob.FetchAttributesAsync();
Вот текущий способ, которым я это делаю, используя извлечение таблицы Azure:
var myGetOperation = TableOperation.Retrieve<TileInfoEntity>("0", imageID);
var myResult = await myTable.ExecuteAsync(myGetOperation);
Заранее спасибо.
Ответ №1:
Необязательно существует правильный или неправильный способ обработки метаданных содержимого — вы можете хранить их где угодно.
Просто имейте в виду: хранилище больших двоичных объектов не предоставляет инструментов запроса метаданных, поэтому нет простого способа работы с метаданными, кроме прямого чтения метаданных конкретного большого объекта.
Системы хранения, такие как табличное хранилище, допускают запросы на основе раздела и / или ключа строки, предоставляя различные типы данных, обеспечивая операции CRUD и т.д. То же самое с любым другим ядром базы данных, поскольку все они предоставляют некоторый тип поддержки индексации / запросов.
Ответ №2:
Единственное, что быстрее, чем извлечение из табличного хранилища, зная ключ строки ключ раздела, — это разогреть кэш Redis со всеми метаданными и извлечь из него.
cache.StringSet("key1", "value1");
string value = cache.StringGet("key1");
Честно говоря, я не думаю, что прирост производительности будет значительным, если мы не говорим о количестве запросов не менее 1 тыс. в секунду.
Кэш вывода в режиме ядра IIS также является хорошим кандидатом, если ваши запросы правильно сформированы (т. Е. Выглядят как статический объект).
<system.webServer>
<caching>
<profiles>
<add extension=".metadata" policy="CacheForTimePeriod"
duration="00:00:55" varyByHeaders="Accept-Language" />
</profiles>
</caching>
</system.webServer>
Знайте, где находится ваше узкое место — не оптимизируйте то, на что не указывает ваша телеметрия.