Вставка сущностей в несколько разделов хранилища таблиц Azure (одна и та же таблица) и определение того, какие вставки завершились ошибкой


У меня есть рабочая роль Azure, настроенная для получения информации из нескольких внешних веб-служб, разбора ее на несколько различных типов сущностей и хранения этих сущностей в хранилище таблиц Azure. Важно отметить, что большинство, если не все из этих сущностей, вставляются в свои собственные разделы таблицы.

Я использую tableservicecontext-расширенный класс с вызовами AddObject (EntityToBeInserted) для присоединения новых сущностей к tableservicecontext по мере их создания. В настоящее время я тогда звоню TableServiceContext.SaveChangesWithRetries (SaveChangesOptions.None) для сохранения этих сущностей в таблице в соответствующих разделах. Все это прекрасно работает.

Мой вопрос: что происходит, когда он не работает нормально? Я могу заставить 1+ сущностей не сохраняться, сделав их ключи строк и разделов неуникальными, но сообщение об ошибке, которое я ловлю вокруг этого поведения, не указывает, какая из сущностей не удалась, просто в одной из них произошла ошибка.

Как я должен поступить? сохранение сущностей в хранилище таблиц из рабочей роли, где каждая сущность переходит в свою собственную секцию (предположим, что в один из этих вызовов сохранения вставлено 2-30 сущностей), так что если одна или несколько из этих вставок завершатся неудачей, я смогу по крайней мере узнать, какая из них была? Эти операции очень чувствительны ко времени, поэтому я, к сожалению, не могу полагаться на длительные варианты повтора, чтобы дождаться, когда соответствующие узлы хранения снова станут доступны.

Спасибо, Алекс

1 2

1 ответ:

Ответ заключается в том, что вы не можете выполнять массовые вставки через разделы хранения таблиц, поэтому вы должны отслеживать идентификаторы (partitionkey и rowkey) вставляемых сущностей и проверять их успешность при обратном вызове async table storage insert call.