Megosztás a következőn keresztül:


Az Azure Cosmos DB írási teljesítményének optimalizálása MongoDB számára

A KÖVETKEZŐKRE VONATKOZIK: MongoDB

Az írási teljesítmény optimalizálásával a lehető legtöbbet hozhatja ki a MongoDB-hez készült Azure Cosmos DB korlátlan skálázásából. Más felügyelt MongoDB-szolgáltatásokkal ellentétben a MongoDB API automatikusan és transzparensen skálázza a gyűjteményeket (szegmenses gyűjtemények használatakor) a végtelen skálázáshoz.

Az adatok írási módjának figyelembe kell vennie ezt azáltal, hogy párhuzamosítja és skálázza az adatokat a szegmensek között, hogy a lehető legtöbb írást lehessen kihozni az adatbázisokból és gyűjteményekből. Ez a cikk az írási teljesítmény optimalizálásának ajánlott eljárásait ismerteti.

A terhelés szétosztása a szegmenseken

Ha adatokat ír a MongoDB-gyűjteményhez készült szegmenses API-ba, az adatok apró szeletekre lesznek felosztva (szegmensekre bontva), és a szegmenskulcs mező értéke alapján minden szegmensbe meg lesz írva. Az egyes szeleteket úgy tekintheti, mint egy virtuális gép kis részét, amely csak egy egyedi szegmenskulcs-értéket tartalmazó dokumentumokat tárol.

Ha az alkalmazás nagy mennyiségű adatot ír egyetlen szegmensbe, ez nem lesz hatékony, mert az alkalmazás csak egy szegmens átviteli sebességét maximálisan kihasználná ahelyett, hogy a terhelést az összes szegmensre terjesztené. Az írási terhelés egyenletesen oszlik el a gyűjteményben azáltal, hogy párhuzamosan ír számos egyedi szegmenskulcs-értékkel rendelkező dokumentummal.

Erre példa egy termékkatalógus-alkalmazás, amely a kategóriamezőre van skálázva. Ahelyett, hogy egyszerre egy kategóriába (szegmensbe) írnál, jobb, ha az összes kategóriára egyszerre írunk a maximális írási sebesség elérése érdekében.

Indexek számának csökkentése

Az indexelés nagyszerű funkció az adatok lekérdezéséhez szükséges idő drasztikus csökkentéséhez. A legrugalmasabb lekérdezési élmény érdekében a MongoDB API-ja alapértelmezés szerint engedélyezi az adatok helyettesítő indexét, hogy az összes mező lekérdezéseit villámgyorsan elvégezhesse. A helyettesítő indexeket tartalmazó indexek azonban további terhelést okoznak az adatok írásakor, mivel az írások megváltoztatják a gyűjteményt és az indexeket.

Ha az indexek számát csak a lekérdezések támogatásához szükséges indexekre csökkenti, az írások gyorsabban és olcsóbban lesznek. Általános szabályként a következőket javasoljuk:

  • Minden olyan mezőnek, amelyre szűr, rendelkeznie kell hozzá egy egymezős indexel. Ez a beállítás többmezős szűrést is lehetővé tesz.
  • A rendezendő mezők minden csoportjának összetett indexet kell használnia az adott csoporthoz.

A MongoDB-illesztőprogramok hamisra rendezve

Alapértelmezés szerint a MongoDB-illesztőprogramok a rendezett beállítást "true" értékre állítják be az adatok írásakor, amely az egyes dokumentumokat egyenként írja. Ez a beállítás csökkenti az írási teljesítményt, mivel minden írási kérelemnek várnia kell az előzőre. Adatok írásakor állítsa ezt a beállítást hamis értékre a teljesítmény javítása érdekében.

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

A köteg optimális méretének és menetszámának finomhangolása

Az írási műveletek párhuzamosítása számos szálon/folyamaton kulcsfontosságú az írások skálázásához. A MongoDB API legfeljebb 1000 dokumentumból álló kötegekben fogad írásokat minden egyes folyamathoz/szálhoz.

Ha folyamatonként/szálonként több mint 1000 dokumentumot ír egyszerre, az ügyfélfunkcióknak insertMany() körülbelül 1000 dokumentumra kell korlátozódnia. Ellenkező esetben az ügyfél megvárja az egyes kötegek véglegesítését, mielőtt továbblépne a következő kötegre. Bizonyos esetekben a kötegek felosztása kevesebb vagy valamivel több mint 1000 dokumentummal gyorsabb lesz.

Következő lépések