Jak jsou počítány transakce na Azure Storage

Při měření spotřeby Azure Storage se počítají dva parametry: objem uložených dat a počet transakcí za měsíc. Standardní jednotková cena ve spotřebním modelu je následující:

1GB/měsíc = 0.15 USD

10k transakcí/měsíc = 0.01 USD

Cena za uložený bajt je celkem pochopitelná, u transakcí však vyvstává celá řada otázek. Pokusím si na ty nejčastější odpovědět:

Q: Co je to vlastně transakce?

A: Transkace je jakákoli operace nad Azure Storage. Nezávisle na tom, jaký konkrétní typ datové struktury použiji – tabulka, blob, queue. Jedna transakce může pracovat s jedním objektem nebo s množinou objektů v případě tzv. batch transakce.

Q: Jak jsou transakce měřeny?

A: Transakce jsou měřeny na úrovni volání jednotlivých Azure Storage API. Pokud zavolám API funkci, která vrátí nebo uloží jeden objekt, jde o jednu transakci. Pokud zavolám API funkci, který provede batch transakci nad množinou objektů, jde také o jednu transakci.

Transakce jsou počítány nezávisle na tom, odkud jsou spouštěny. Azure Storage může být využíván z aplikací hostovaných v Azure compute rolích, tak z lokálních tlustých aplikací nebo z jiných webových aplikací běžících mimo Windows Azure. Transakce se ve všech případech počítají identicky.

Q: Jak optimalizovat?

A: Pokud lze dotazy do Azure storage agregovat do jedné transakce, použijte dávkové zpracování.

Q: Můžete uvést konkrétní příklady?

A:

  • Uložení jedné položky do blob service = 1 transakce
  • Uložení 4 požadavků přes PutBlock a pak jeden PutBlockList pro commit = 5 transakcí
  • Vylistování 5 položek blobu (z důvodu použití „continuation tokenu“) = 5 transakcí
  • Update jedné položky v tabulce = 1 transakce
  • Dávková transakce 100 položek nad tabulkou = 1 transakce
  • Dotaz do tabulky pro vracející jednu položku = 1 transakce
  • Jeden dotaz do tabulky vracející 100 položek = 1 transakce
  • Vytvoření 5 dotazů do tabulky (z důvodu použití „continuation tokenu“) = 5 transakcí
  • Dotaz nad frontou vracející jednu zprávu = 1 transakce
  • Dávkový dotaz nad frontou vracející 32 položek = 1 transakce

Jinými slovy, každý HTTP REST volání do blobu, tablky nebo queue služeb stojí 1 transakci.