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.