Sdílet prostřednictvím


Optimalizace výkonu zápisu ve službě Azure Cosmos DB for MongoDB

PLATÍ PRO: MongoDB

Optimalizace výkonu zápisu vám pomůže dosáhnout maximálního výkonu služby Azure Cosmos DB pro neomezené škálování MongoDB. Na rozdíl od jiných spravovaných služeb MongoDB rozhraní API pro MongoDB automaticky a transparentně horizontálně škáluje vaše kolekce (při použití horizontálně dělených kolekcí).

Způsob, jakým data zapisujete, je potřeba na to myslet paralelizací a rozložením dat mezi horizontální oddíly, abyste získali nejvíce zápisů z databází a kolekcí. Tento článek vysvětluje osvědčené postupy pro optimalizaci výkonu zápisu.

Rozprostřete zatížení napříč horizontálními oddíly.

Při zápisu dat do shardovaného rozhraní API pro kolekci MongoDB se vaše data rozdělí (horizontálně rozdělí) do malých řezů a zapíšou se do každého horizontálního oddílu na základě hodnoty pole klíče horizontálního oddílu. Každý řez si můžete představit jako malou část virtuálního počítače, ve které jsou uložené jenom dokumenty obsahující jednu jedinečnou hodnotu klíče horizontálního oddílu.

Pokud vaše aplikace zapíše obrovské množství dat do jednoho horizontálního oddílu, nebude to efektivní, protože aplikace by místo rozložení zatížení napříč všemi horizontálními oddíly navýšil propustnost pouze jednoho horizontálního oddílu. Zatížení zápisu se rovnoměrně rozšíří napříč kolekcí tím, že se zapíše paralelně do mnoha dokumentů s jedinečnými hodnotami klíčů horizontálních oddílů.

Jedním z příkladů je aplikace katalogu produktů, která je horizontálně dělená v poli kategorie. Místo zápisu do jedné kategorie (horizontálních oddílů) je lepší zapisovat do všech kategorií současně, aby se dosáhlo maximální propustnosti zápisu.

Snížení počtu indexů

Indexování je skvělá funkce, která výrazně zkracuje dobu potřebnou k dotazování dat. V případě nejflexibilnějšího prostředí dotazů rozhraní API pro MongoDB ve výchozím nastavení umožňuje index se zástupnými znamény na vašich datech, aby se dotazy na všechna pole zasálaly rychle. Všechny indexy, které zahrnují indexy se zástupnými znaky, však při zápisu dat při zápisu dat přivádějí další zatížení, protože zápisy mění kolekci a indexy.

Snížení počtu indexů jenom na indexy, které potřebujete k podpoře dotazů, zajistí rychlejší a levnější zápisy. Obecně platí, že doporučujeme následující:

  • Každé pole, podle kterého filtrujete, by mělo mít odpovídající index s jedním polem. Tato možnost také umožňuje filtrování více polí.
  • Každá skupina polí, podle kterých seřadíte, by měla mít složený index pro tuto skupinu.

Nastavení seřazené na hodnotu false v ovladačích MongoDB

Ovladače MongoDB ve výchozím nastavení při zápisu dat nastavují seřazenou možnost na true, která zapisuje každý dokument v pořadí po druhém. Tato možnost snižuje výkon zápisu, protože každý požadavek na zápis musí čekat na dokončení předchozího požadavku. Při zápisu dat nastavte tuto možnost na false, aby se zlepšil výkon.

db.collection.insertMany(
   [ <doc1> , <doc2>, ... ],
   {
      ordered: false
   }
)

Ladění optimální velikosti dávky a počtu vláken

Paralelizace operací zápisu napříč mnoha vlákny a procesy je klíčem ke škálování zápisů. Rozhraní API pro MongoDB přijímá zápisy do dávek až 1 000 dokumentů pro každý proces nebo vlákno.

Pokud píšete více než 1 000 dokumentů najednou na proces nebo vlákno, klientské funkce, jako insertMany() by měly být omezené na přibližně 1 000 dokumentů. Jinak klient před přechodem na další dávku počká na potvrzení každé dávky. V některýchpřípadechch

Další kroky