Как оптимизировать транзакционные издержки от проверки наличия ключей?

Я разрабатываю приложение с использованием больших двоичных объектов/таблиц/очередей службы хранилища Azure, обрабатывая огромные объемы данных. Одним из важных аспектов приложения является то, что работа будет выполнена, если данный ключ не существует, а определение существования ключа является частой и трудоемкой задачей.

Мне нужно максимально оптимизировать оплачиваемые транзакции с проверки наличия ключей. Это может быть либо против больших двоичных объектов, либо против таблиц.

Я просмотрел этот документ Общие сведения о выставлении счетов за хранилище Windows Azure — пропускная способность, транзакции и емкость Похоже, что ошибки 404 учитываются не только для анонимных запросов.

Я также думал об использовании BatchTableOperation для одновременной проверки 100 ключей, возможно, с помощью замены или слияния, и определения в результатах, действительно ли существует ключ (не пробовал, на самом деле я понял эту идею во время написания)

Любой хороший хак приветствуется.


person uzul    schedule 20.01.2013    source источник


Ответы (1)


Вам следует использовать кэширование Windows Azure:

  • Загрузить все существующие ключи в кеше
  • Каждый раз, когда вы добавляете запись в Table Storage, также добавляйте ее в кэш

После того, как вы это сделаете, ваше приложение сначала должно проверить кеш. Если элемента там нет, проверьте Хранилище таблиц, чтобы быть уверенным (чтобы покрыть крайние случаи). Но в 99% случаев, если элемент уже обработан, ключ будет доступен в кеше, и вам не нужно будет запрашивать Хранилище таблиц (это резко сократит количество транзакций в Хранилище таблиц).

Если использование кэширования Windows Azure невозможно, существуют альтернативы, например использование MemoryCache, сохранить все ключи в файл, ...

person Sandrino Di Mattia    schedule 20.01.2013
comment
Я рассматривал возможность использования совместного кэширования. Проблема в том, что я ожидаю сотни миллионов ключей, а мне уже нужно кешировать результаты операций. Однако пока я не рассматривал возможность записи их в файл. - person uzul; 20.01.2013