Optimalizace nákladů na požadavky ve službě Azure Cosmos DB
PLATÍ PRO: Rozhraní API Cassandra API
Gremlin
API Table API
služby Azure Cosmos DB API pro MongoDB
Tento článek popisuje, jak se žádosti o čtení a zápis překládají do jednotek žádostí a jak optimalizovat náklady na tyto žádosti. 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ěhardwarových materiálech, můžete si místo toho představit a spravovat hardwarové prostředky, můžete si představit jednotku požadavku (RU) jako jednu míru pro prostředky potřebné k provádění různých databázových operací.
Měření poplatku za RU žádosti
Je důležité měřit poplatky za RU vašich požadavků, abyste porozuměli jejich skutečným nákladům a také vyhodnotili efektivitu optimalizace. Tyto náklady můžete načíst pomocí webu Azure Portal nebo zkontrolovat odpověď odeslanou ze služby Azure Cosmos DB prostřednictvím jedné ze sad SDK. Podrobné pokyny k dosažení tohoto postupu najdete v tématu Vyhledání poplatku za jednotku požadavku ve službě Azure Cosmos DB .
Čtení dat: čtení bodů a dotazů
Operace čtení ve službě Azure Cosmos DB se obvykle řazuje z nejrychlejších/nejúčinnějších na pomalejší nebo méně efektivní z hlediska spotřeby RU následujícím způsobem:
- Čtení bodů (vyhledávání klíč/hodnota u JEDNOHO ID položky a klíče oddílu)
- Dotazování pomocí klauzule filtru v rámci jednoho klíče oddílu
- Dotaz bez klauzule filtru rovnosti nebo rozsahu u jakékoli vlastnosti
- Dotaz bez filtrů
Role úrovně konzistence
Při použití úrovní konzistencesilné nebo omezené zastaralé konzistence se náklady na RU jakékoli operace čtení (bod čtení nebo dotaz) zdvojnásobí.
Čtení bodů
Jediným faktorem ovlivňujícím poplatky za RU bodu čtení (kromě použité úrovně konzistence) je velikost načtené položky. V následující tabulce jsou uvedeny náklady na počet bodů čtení bodů pro položky, které mají velikost 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) je nejúčinnějším typem čtení, měli byste se ujistit, že ID položky má smysluplnou hodnotu, abyste mohli položky načíst pomocí bodu čtení (místo dotazu), pokud je to možné.
Dotazy
Jednotky žádostí pro dotazy jsou závislé na řadě faktorů. Například počet načtených nebo vrácených položek Služby Azure Cosmos, počet vyhledávání v indexu, čas kompilace dotazu atd. Azure Cosmos DB zaručuje, že stejný dotaz při spuštění na stejných datech bude vždy využívat stejný počet jednotek žádostí i při opakovaných spuštěních. Profil dotazu s využitím metrik spouštění dotazů vám dává dobrou představu o tom, jak se jednotky žádostí tráví.
V některýchpřípadechchch jednotkách se může zobrazit posloupnost odpovědí 200 a 429 a jednotek požadavků proměnných, to znamená, že dotazy budou fungovat co nejrychleji na základě dostupných ru. Mezi serverem a klientem se může zobrazit přerušení provádění dotazů na několik stránek nebo zaokrouhlení. Například 10 000 položek může být vráceno jako více stránek, každý se účtuje na základě výpočtů provedených pro danou stránku. Při součet na těchto stránkách byste měli získat stejný počet RU, kolik byste získali pro celý dotaz.
Metriky pro dotazy pro řešení potíží
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 je provádění dotazů strávené v UDF a počet spotřebovaných RU, je povolením metrik 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 optimalizaci nákladů dotazů
Při optimalizaci dotazů na náklady zvažte následující osvědčené postupy:
Spolulokace více typů entit
Pokuste se přidělit více typů entit v rámci jednoho nebo menšího počtu kontejnerů. Tato metoda přináší výhody nejen z hlediska cen, ale také pro provádění dotazů a transakce. Dotazy jsou vymezeny na jeden kontejner; a atomické transakce přes více záznamů prostřednictvím uložených procedur/triggerů jsou vymezeny na klíč oddílu v rámci jednoho kontejneru. Spolulokace entit v rámci stejného kontejneru může snížit počet síťových cest zaokrouhlení za účelem vyřešení relací mezi záznamy. Proto zvyšuje výkon koncového to-endu, 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 pro váš scénář obtížné přidělit více typů entit v rámci jednoho nebo menšího počtu kontejnerů, 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í pro nižší jednotky požadavků/ druhé využití
Složitost dotazu má vliv na počet jednotek žádostí (RU) spotřebovaných pro operaci. 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í zřízeného modelu propustnosti. Zřízená propustnost je reprezentována z hlediska jednotek žádostí za sekundu nebo RU/s. Jednotka požadavku (RU) je logická abstrakce výpočetních prostředků, jako je procesor, paměť, vstupně-výstupní operace atd., které jsou nutné k provedení požadavku. Zřízená propustnost (RU) je vyhrazená a vyhrazená pro kontejner nebo databázi, aby poskytovala předvídatelnou propustnost a latenci. Zřízená propustnost umožňuje službě Azure Cosmos DB poskytovat předvídatelný a konzistentní výkon, garantovat nízkou latenci a vysokou dostupnost v libovolném měřítku. Jednotky žádostí představují normalizovanou měnu, která zjednodušuje odůvodnění toho, 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 například dotaz vrátí 1000 1 kB položek, náklady na operaci jsou 1000. Server tedy během jedné sekundy respektuje pouze dva takové požadavky před omezováním rychlosti následných požadavků. Další informace najdete v článku o jednotkách žádostí a kalkulačce jednotek žádosti.
Zápis dat
Náklady na zápis položky ru závisí na těchto parametrech:
- Velikost položky.
- Počet vlastností, na které se vztahuje zásada indexování , a je potřeba je indexovat.
Vložení položky o velikosti 1 kB bez indexování nákladů kolem přibližně 5,5 RU Nahrazení nákladů na položku dvakrát účtují poplatky potřebné k vložení stejné položky.
Optimalizace zápisů
Nejlepším způsobem, 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 vede k vysokým poplatkům za RU a dá se považovat za anti-vzor. Konkrétně neukládáte binární obsah ani velké bloky textu, na které se nemusíte dotazovat. Osvědčeným postupem je umístit tento druh dat do služby Azure Blob Storage a uložit odkaz (nebo odkaz) na objekt blob v položce, kterou píšete do služby Azure Cosmos DB.
- Optimalizace zásad indexování tak, aby indexovala jenom vlastnosti, na které se vaše dotazy filtrují, můžou mít velký rozdíl v rukách spotřebovaných operacemi zápisu. Při vytváření nového kontejneru indexuje výchozí zásady indexování každou a každou vlastnost, která se nachází ve vašich položkách. I když se jedná o vhodné výchozí nastavení pro vývojové aktivity, důrazně doporučujeme znovu vyhodnotit a přizpůsobit zásady indexování při přechodu do produkčního prostředí nebo v případě, že vaše úloha začne přijímat významný provoz.
Při hromadném příjmu dat se také doporučuje použít knihovnu bulk Executor služby Azure Cosmos DB , protože je navržená tak, aby optimalizovala spotřebu RU těchto operací. Volitelně můžete také použít Azure Data Factory , která je postavená 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 vývoje 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 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 stávajícím databázovém clusteru můžete použít k plánování kapacity.
- Pokud víte, že je počet virtuálních jader a serverů v existujícím databázovém clusteru, přečtěte si informace o odhadu jednotek žádostí pomocí virtuálních jader nebo virtuálních procesorů.
- Pokud znáte typické sazby požadavků pro aktuální úlohu databáze, přečtěte si informace o odhadu jednotek žádostí pomocí plánovače kapacity služby Azure Cosmos DB.