Optimalizace nákladů na požadavky ve službě Azure Cosmos DB
PLATÍ PRO: NoSQL MongoDB Cassandra Gremlin Tabulka
Tento článek popisuje, jak se žádosti o čtení a zápis překládají na jednotky žádostí a jak optimalizovat náklady na tyto požadavky. Operace čtení zahrnují čtení bodů a dotazy. Operace zápisu zahrnují vložení, nahrazení, odstranění a upsert položek.
Azure Cosmos DB nabízí bohatou sadu databázových operací, které pracují s položkami v kontejneru. Náklady spojené s jednotlivými operacemi se liší v závislosti na procesoru, V/V a paměti, které jsou potřeba k dokončení operace. Místo toho, abyste přemýšleli o hardwarových prostředcích a správě těchto prostředků, si můžete jednotku žádostí (RU) představit jako jedno měřítko pro prostředky potřebné k provádění různých databázových operací, které obsluhuje požadavek.
Měření poplatku za RU požadavku
Je důležité změřit poplatky za RU vašich požadavků, abyste porozuměli jejich skutečným nákladům a také posoudili efektivitu vašich optimalizací. Tyto náklady můžete načíst pomocí Azure Portal nebo kontrolou odpovědi odeslané zpět ze služby Azure Cosmos DB prostřednictvím některé ze sad SDK. Podrobné pokyny, jak toho dosáhnout, najdete v tématu Vyhledání poplatku za jednotku žádosti ve službě Azure Cosmos DB .
Čtení dat: čtení bodů a dotazy
Operace čtení ve službě Azure Cosmos DB jsou obvykle seřazené od nejrychlejšího/nejúčinnějšího na pomalejší/méně efektivní z hlediska spotřeby RU následujícím způsobem:
- Čtení v bodech (vyhledávání klíče/hodnoty podle ID jedné položky a klíče oddílu)
- Dotaz s klauzulí filtru v rámci jednoho klíče oddílu.
- Dotaz bez klauzule filtru rovnosti nebo rozsahu na libovolnou vlastnost.
- Dotaz bez filtrů
Role úrovně konzistence
Při použití úrovně konzistencesilné nebo omezené nestaralosti se náklady na RU jakékoli operace čtení (bod čtení nebo dotaz) zdvojnásobí.
Čtení bodů
Jediným faktorem, který ovlivňuje poplatek za RU při čtení bodu (kromě použité úrovně konzistence), je velikost načtené položky. Následující tabulka ukazuje náklady na RU čtení bodů u položek o velikosti 1 kB a 100 kB.
Velikost položky | Náklady na čtení jednoho bodu |
---|---|
1 kB | 1 RU |
100 kB | 10 RU |
Vzhledem k tomu, že čtení bodů (vyhledávání klíč/hodnota v ID položky a klíči oddílu) je nejúčinnější druh čtení, měli byste se ujistit, že ID položky má smysluplnou hodnotu, abyste mohli položky načíst se čteným bodem (místo dotazu), pokud je to možné.
Poznámka
V rozhraní API pro NoSQL je možné čtení bodů provádět pouze pomocí rozhraní REST API nebo sad SDK. Dotazy, které filtrují ID jedné položky a klíč oddílu, se nepovažují za přečtený bod. Příklad použití sady .NET SDK najdete v tématu Čtení položky ve službě Azure Cosmos DB for NoSQL.
Dotazy
Jednotky žádostí pro dotazy jsou závislé na několika faktorech. Například počet načtených/vrácených položek Služby Azure Cosmos DB, počet vyhledávání v indexu, doba kompilace dotazu atd. Podrobnosti. Azure Cosmos DB zaručuje, že stejný dotaz při spuštění na stejných datech bude vždy spotřebovávat stejný počet jednotek žádosti, a to i při opakovaných spuštěních. Profil dotazu, který používá metriky spouštění dotazů, poskytuje dobrou představu o tom, jak se jednotky žádostí využívají.
V některých případech se při stránkovaném provádění dotazů může zobrazit posloupnost odpovědí 200 a 429 a proměnných jednotek žádostí, protože dotazy budou na základě dostupných RU běžet co nejrychleji. Může se zobrazit přerušení provádění dotazu na více stránek nebo doba odezvy mezi serverem a klientem. Například 10 000 položek může být vráceno jako více stránek, z nichž každá se účtuje na základě výpočtu provedeného pro danou stránku. Když sečtete všechny tyto stránky, měli byste získat stejný počet RU, jaký byste získali pro celý dotaz.
Metriky pro řešení potíží s dotazy
Výkon a propustnost spotřebovaná dotazy (včetně uživatelem definovaných funkcí) většinou závisí na těle funkce. Nejjednodušší způsob, jak zjistit, kolik času provádění dotazu stráví v UDF a počet spotřebovaných RU, je povolit metriky dotazů. Pokud používáte sadu .NET SDK, tady jsou ukázkové metriky dotazů vrácené sadou SDK:
Retrieved Document Count : 1
Retrieved Document Size : 9,963 bytes
Output Document Count : 1
Output Document Size : 10,012 bytes
Index Utilization : 100.00 %
Total Query Execution Time : 0.48 milliseconds
Query Preparation Times
Query Compilation Time : 0.07 milliseconds
Logical Plan Build Time : 0.03 milliseconds
Physical Plan Build Time : 0.05 milliseconds
Query Optimization Time : 0.00 milliseconds
Index Lookup Time : 0.06 milliseconds
Document Load Time : 0.03 milliseconds
Runtime Execution Times
Query Engine Execution Time : 0.03 milliseconds
System Function Execution Time : 0.00 milliseconds
User-defined Function Execution Time : 0.00 milliseconds
Document Write Time : 0.00 milliseconds
Client Side Metrics
Retry Count : 1
Request Charge : 3.19 RUs
Osvědčené postupy pro dotazy pro optimalizaci nákladů
Při optimalizaci dotazů z hlediska nákladů zvažte následující osvědčené postupy:
Společné umístění více typů entit
Zkuste společně rozmístit více typů entit v jednom nebo menším počtu kontejnerů. Tato metoda přináší výhody nejen z hlediska cen, ale také z hlediska provádění dotazů a transakcí. Dotazy jsou vymezeny na jeden kontejner; atomické transakce nad více záznamy prostřednictvím uložených procedur nebo triggerů jsou vymezeny na klíč oddílu v rámci jednoho kontejneru. Společné umístění entit ve stejném kontejneru může snížit počet odezvy sítě, aby se vyřešily vztahy mezi záznamy. Zvyšuje tak komplexní výkon, umožňuje atomické transakce přes více záznamů pro větší datovou sadu a v důsledku toho snižuje náklady. Pokud je společné umístění více typů entit do jednoho nebo menšího počtu kontejnerů pro váš scénář obtížné, obvykle proto, že migrujete existující aplikaci a nechcete provádět žádné změny kódu, měli byste zvážit zřízení propustnosti na úrovni databáze.
Měření a ladění s nižším využitím jednotek žádostí za sekundu
Složitost dotazu má vliv na to, kolik jednotek žádostí (RU) se pro operaci spotřebuje. Počet predikátů, povaha predikátů, počet UDF a velikost zdrojové sady dat. Všechny tyto faktory ovlivňují náklady na operace dotazů.
Azure Cosmos DB poskytuje předvídatelný výkon z hlediska propustnosti a latence pomocí modelu zřízené propustnosti. Zřízená propustnost se reprezentuje v jednotkách žádostí za sekundu neboli RU/s. Jednotka žádosti (RU) je logická abstrakce výpočetních prostředků, jako jsou procesor, paměť, vstupně-výstupní operace atd. které jsou nutné k provedení požadavku. Zřízená propustnost (RU) je vyhrazená a vyhrazená pro váš kontejner nebo databázi, aby se zajistila předvídatelná propustnost a latence. Zřízená propustnost umožňuje službě Azure Cosmos DB poskytovat předvídatelný a konzistentní výkon, garantovanou nízkou latenci a vysokou dostupnost v libovolném měřítku. Jednotky žádostí představují normalizovanou měnu, která zjednodušuje uvažování o tom, kolik prostředků aplikace potřebuje.
Poplatek za požadavek vrácený v hlavičce požadavku označuje náklady na daný dotaz. Pokud dotaz například vrátí 1000 položek o 1 kB, náklady na operaci jsou 1000. Proto server během jedné sekundy vyhodne jenom dvěma takovým požadavkům, než omezí rychlost následných požadavků. Další informace najdete v článku o jednotkách žádostí a v kalkulačce jednotek žádostí.
Zápis dat
Náklady na RU při zápisu položky závisí na:
- Velikost položky.
- Počet vlastností, na které se vztahují zásady indexování a které je potřeba indexovat.
Vložení 1kB položky bez indexování stojí přibližně 5,5 RU. Nahrazení položky stojí dvojnásobek poplatku za vložení stejné položky.
Optimalizace zápisů
Nejlepší způsob, jak optimalizovat náklady na RU operací zápisu, je nastavení práv položek a počtu vlastností, které se indexují.
- Ukládání velmi velkých položek ve službě Azure Cosmos DB má za následek vysoké poplatky za RU a je možné ho považovat za anti-vzor. Zejména neukládejte binární obsah nebo velké bloky textu, na které se nemusíte dotazovat. Osvědčeným postupem je umístit tento druh dat do Azure Blob Storage a uložit odkaz (nebo odkaz) na objekt blob v položce, kterou zapisujete do služby Azure Cosmos DB.
- Optimalizace zásad indexování tak, aby indexovaly pouze vlastnosti, které filtrují vaše dotazy, může mít velký vliv na počet RU spotřebovaných vašimi operacemi zápisu. Výchozí zásady indexování při vytváření nového kontejneru indexují každou vlastnost nalezenou ve vašich položkách. I když se jedná o vhodné výchozí nastavení pro aktivity vývoje, důrazně doporučujeme znovu vyhodnotit a přizpůsobit zásady indexování , když přejdete do produkčního prostředí nebo když vaše úloha začne přijímat velký provoz.
Při hromadném příjmu dat se také doporučuje používat knihovnu Bulk Executor služby Azure Cosmos DB , která je navržená tak, aby optimalizovala spotřebu RU při takových operacích. Volitelně můžete použít také Azure Data Factory, který je založený na stejné knihovně.
Další kroky
Další informace o optimalizaci nákladů ve službě Azure Cosmos DB najdete v následujících článcích:
- Další informace o optimalizaci pro vývoj a testování
- Další informace o vysvětlení informací na faktuře za službu Azure Cosmos DB
- Další informace o optimalizaci nákladů na propustnost
- Další informace o optimalizaci nákladů na úložiště
- Další informace o optimalizaci nákladů na účty Azure Cosmos DB ve více oblastech
- Další informace o rezervované kapacitě služby Azure Cosmos DB
- Pokoušíte se naplánovat kapacitu pro migraci do služby Azure Cosmos DB? Informace o existujícím databázovém clusteru můžete použít k plánování kapacity.
- Pokud víte jen o počtu virtuálních jader a serverů v existujícím databázovém clusteru, přečtěte si o odhadu jednotek žádostí pomocí virtuálních jader nebo virtuálních procesorů.
- Pokud znáte typické frekvence požadavků pro aktuální úlohy databáze, přečtěte si o odhadu jednotek žádostí pomocí Plánovače kapacity služby Azure Cosmos DB.