Приращение поля int в хранилище таблиц Windows Azure

Я думал о большом улучшении хранилища таблиц Azure. Можно ли отправить запрос в хранилище таблиц с помощью определенной операции, такой как «увеличить поле объекта [имя] на [значение], где [PartitionKey = somestingPK] и [RowKey = somethingRK]»?

@smarx это функция будет доступна?


person Vadim Novitskiy    schedule 15.11.2012    source источник
comment
stackoverflow.com/a/11853335/67824   -  person Ohad Schneider    schedule 03.12.2016


Ответы (3)


Это можно сделать с помощью хранилища таблиц или страниц с включенным отслеживанием ETAG. Я использую этот метод для создания значения удостоверения для каждой записи в таблице Azure. Идея такая:

  • Считайте значение из Page Blob, оставьте отслеживание ETAG включенным

  • Увеличить полученное значение

  • Выполните POST полученное значение и, если есть конфликт ETAG, повторите всю операцию заново. Возможно, используйте здесь экспоненциальный алгоритм отсрочки, чтобы предотвратить перегрузку целевого контейнера или раздела.

person halfbit    schedule 16.11.2012
comment
Я называю такой подход костылом. Но я хочу использовать встроенную реализацию атомарного приращения в хранилище таблиц. - person Vadim Novitskiy; 22.11.2012

Да, это возможно, но, возможно, не совсем так, как вы думаете. Вы ищете операцию MERGE. Чтобы использовать его, вы должны знать объект (то есть ключ раздела и ключ строки объекта), на который вы нацеливаетесь. Вам не нужно извлекать сущность для ее обновления, но вы должны специально адресовать каждую сущность либо для каждого вызова REST, либо с использованием пакетных возможностей (что имеет некоторые ограничения).

person dunnry    schedule 15.11.2012
comment
Он ищет атомарное приращение. Сегодня такого нет. - person user94559; 15.11.2012
comment
Но я не могу использовать операцию приращения. Только поставил. Я предполагаю, что невозможно обновить сущность в хранилище таблиц. Но эта операция недоступна через REST API. - person Vadim Novitskiy; 15.11.2012

Это похоже на UPDATE запрос MySQL и в настоящее время невозможно выполнить в хранилище таблиц Azure. Не уверен, можно ли этого достичь в таком типе базы данных, поскольку сначала нужно получить всю сущность, обновить нужные поля и сохранить обратно в базу данных.

person Thanos Makris    schedule 15.11.2012
comment
Я знаю, что сейчас это невозможно. Хочу поделиться своим предложением с разработчиками :) - person Vadim Novitskiy; 15.11.2012