Обработка конфликта с транзакциями группы сущностей в Azure - PullRequest
1 голос
/ 22 декабря 2009

В настоящее время я пишу метод, который для снижения транзакционных издержек вставляет сущности в Azure Table Services партиями по 100 штук.

Вставленные объекты являются неизменяемыми. То есть если PartitionKey и RowKey идентичны между двумя объектами полномочий, это означает, что все остальные свойства также идентичны. Поэтому мне никогда не потребуется обновлять эту таблицу, потому что после вставки сущность останется прежней.

Проблема, с которой я сталкиваюсь, заключается в том, что в этом пакете я не могу быть на 100% уверен, что ни одна из сущностей не была вставлена ​​ранее. Поэтому, если я просто вставляю сущности как обычно (через AddObject и SaveChanges), транзакция может завершиться с ошибкой, что сущность не может быть добавлена, потому что она уже существует. Поскольку транзакция является атомарной, это означает, что ни одно из прав не добавлено.

Я не могу проверить наличие каждого объекта в транзакции, потому что это будет слишком дорого (один запрос на объект стоит слишком дорого, а один запрос с использованием ИЛИ приводит к сканированию таблицы по всей таблице). Поэтому мне нужен какой-то способ добавить объект, если он не существует, и игнорировать его или обновить его, если он существует (игнорирование или обновление для меня будут такими же, поскольку права являются неизменяемыми).

Как мне добиться этого в Azure Table Services?

1 Ответ

2 голосов
/ 23 июля 2010

Согласно этой статье в настоящее время нет способа "защитить" сущность, если она уже существует. В настоящее время рекомендуется обрабатывать запрос с использованием нескольких рабочих ролей и нескольких потоков, проверяя наличие каждой сущности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...