Ajánlott eljárások az Azure Cosmos DB Java SDK-hoz

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Ez a cikk az Azure Cosmos DB Java SDK használatának ajánlott eljárásait ismerteti. Ezen eljárások követésének segítségével javíthatja a késést, a rendelkezésre állást és növelheti az általános teljesítményt.

Ellenőrző lista

Jelölje be Téma Részletek/hivatkozások
SDK Version Mindig az optimális teljesítmény érdekében elérhető Azure Cosmos DB SDK legújabb verzióját használja.
Singleton-ügyfél Használjon egyetlen példányt CosmosClient az alkalmazás teljes élettartama alatt a jobb teljesítmény érdekében.
Regions A késés csökkentése érdekében mindenképpen ugyanabban az Azure-régióban futtassa az alkalmazást, mint az Azure Cosmos DB-fiókját. Engedélyezze a 2–4 régiót, és replikálja a fiókjait több régióban a legjobb rendelkezésre állás érdekében. Éles számítási feladatok esetén engedélyezze a szolgáltatás által felügyelt feladatátvételt. Ennek a konfigurációnak a hiányában a fiók írási rendelkezésre állása az írási régió leállásának teljes időtartamára csökken, mivel a manuális feladatátvétel a régiókapcsolat hiánya miatt nem fog sikerülni. További információ arról, hogyan adhat hozzá több régiót a Java SDK-látogatással
Rendelkezésre állás és feladatátvétel Állítsa be a preferáltregionokat a v4 SDK-ban. A feladatátvételek során az írási műveleteket a rendszer az aktuális írási régióba küldi, és az összes olvasást az előnyben részesített régiók listájában lévő első régióba küldi. A regionális feladatátvételi mechanikával kapcsolatos további információkért tekintse meg a rendelkezésre állási hibaelhárítási útmutatót.
CPU Kapcsolódási/rendelkezésre állási problémákat tapasztalhat az ügyfélszámítógép erőforrásainak hiánya miatt. Monitorozza a cpu-kihasználtságot az Azure Cosmos DB-ügyfelet futtató csomópontokon, és vertikálisan fel- és felskálázható, ha a használat nagyon magas.
Üzemeltetés Az éles számítási feladatok leggyakoribb eseteihez javasoljuk, hogy lehetőség szerint használjunk legalább 4 magos és 8 GB memóriájú virtuális gépeket.
Csatlakozás tivitási módok A legjobb teljesítmény érdekében használja a Közvetlen módot . Ennek módjáról a V4 SDK dokumentációjában olvashat.
Networking Ha virtuális gépet használ az alkalmazás futtatásához, engedélyezze a gyorsított hálózatkezelést a virtuális gépen, hogy segítsen a nagy forgalom miatti szűk keresztmetszetek elhárításában, és csökkentse a késést vagy a cpu-jittert. Érdemes lehet megfontolni egy magasabb szintű virtuális gép használatát is, ahol a maximális processzorhasználat 70% alatt van.
Rövid élettartamú portkimerülés Ritka vagy szórványos kapcsolatok esetén javasoljuk, hogy a idleEndpointTimeout beállítást magasabb értékre állítsa. A idleEndpointTimeout tulajdonság segít DirectConnectionConfig szabályozni a nem használt kapcsolatok bezárásának idejét. Ez csökkenti a nem használt kapcsolatok számát. Alapértelmezés szerint egy végpont tétlen kapcsolatai 1 órán át nyitva maradnak. Ha nincsenek kérések egy adott végpontra az inaktív végpont időtúllépési időtartamára vonatkozóan, a közvetlen ügyfél bezárja az adott végponttal létesített összes kapcsolatot az erőforrások és az I/O-költségek mentése érdekében.
Megfelelő ütemező használata (Az eseményhurok IO Netty-szálainak ellopásának elkerülése) Kerülje a hívások blokkolását: .block(). A teljes hívásverem aszinkron, hogy kihasználhassa az aszinkron API-minták előnyeit, valamint a megfelelő szál- és ütemezők használatát
Végpontok közötti időtúllépések A végpontok közötti időtúllépések eléréséhez implementáljon végpontok közötti időtúllépési szabályzatot a Java SDK-ban. Az Azure Cosmos DB időtúllépéseivel kapcsolatos további részletekért látogasson el ide
Újrapróbálkozási logika Az átmeneti hiba olyan hiba, amelynek kiváltó oka hamarosan megoldódik. Applications that connect to your database should be built to expect these transient errors. A kezelésükhöz implementáljon újrapróbálkozási logikát a kódban ahelyett, hogy alkalmazáshibákként észleli őket a felhasználóknak. Az SDK beépített logikával rendelkezik az újrapróbálkozási kérések, például olvasási vagy lekérdezési műveletek átmeneti hibáinak kezelésére. Az SDK nem próbálkozik újra az írásokon átmeneti hibák esetén, mivel az írások nem idempotensek. Az SDK lehetővé teszi, hogy a felhasználók újrapróbálkozási logikát konfiguráljanak a szabályozásokhoz. A látogatás során újrapróbálkozandó hibákról itt olvashat bővebben
Adatbázis-/gyűjteménynevek gyorsítótárazása Kérje le az adatbázisok és tárolók nevét a konfigurációból, vagy gyorsítótárazza őket az indításkor. A hívások metaadat-hívásokat eredményeznek vagy CosmosAsyncContainer#read() hasonlók CosmosAsyncDatabase#read() a szolgáltatáshoz, amelyek a rendszer által fenntartott RU-korlátból lesznek felhasználva. createDatabaseIfNotExists() az adatbázis beállításához is csak egyszer kell használni. Általánosságban elmondható, hogy ezeket a műveleteket ritkán kell végrehajtani.
Párhuzamos lekérdezések Az Azure Cosmos DB SDK támogatja a lekérdezések párhuzamos futtatását a lekérdezések jobb késése és átviteli sebessége érdekében. Javasoljuk, hogy a maxDegreeOfParallelism tulajdonságot a CosmosQueryRequestsOptions megadott számú partícióra állítsa. Ha nem ismeri a partíciók számát, állítsa be azt az értéket -1 , amely a legjobb késést fogja eredményezni. Emellett állítsa be a maxBufferedItemCount visszaadott eredmények várt számát is az előre lekért eredmények számának korlátozásához.
Teljesítménytesztelési visszalépések Az alkalmazáson végzett tesztelés során időközönként végre kell hajtania a visszalépéseket RetryAfter . A visszalépés tiszteletben tartásával biztosíthatja, hogy az újrapróbálkozások között minimális ideig várakozhasson.
Indexelés Az Azure Cosmos DB indexelési szabályzata azt is lehetővé teszi, hogy az indexelési útvonalak IndexingPolicy#getIncludedPaths() és IndexingPolicy#getExcludedPaths()a . A gyorsabb írás érdekében zárja ki a nem használt útvonalakat az indexelésből. Az indexek SDK-val történő létrehozásáról itt talál egy mintát
Dokumentumméret Egy adott művelet kérelemdíja közvetlenül a dokumentum méretével függ össze. Javasoljuk, hogy csökkentse a dokumentumok méretét, mivel a nagyméretű dokumentumokon végzett műveletek többe kerülnek, mint a kisebb dokumentumokon végzett műveletek.
Oldalméret Alapértelmezés szerint a lekérdezési eredmények 100 elemből vagy 4 MB-ból álló adattömbökben jelennek meg, attól függően, hogy melyik korlátot éri el először a rendszer. Ha egy lekérdezés több mint 100 elemet ad vissza, növelje az oldalméretet a szükséges ciklikus utak számának csökkentése érdekében. A memóriahasználat az oldalméret növekedésével nő.
Lekérdezési metrikák engedélyezése A háttérbeli lekérdezések végrehajtásának további naplózásához kövesse az SQL-lekérdezési metrikák Java SDK-val történő rögzítésére vonatkozó utasításokat
SDK-naplózás Az SDK-naplózással további diagnosztikai információkat rögzíthet, és elháríthatja a késési problémákat. A CosmosDiagnostics java SDK-ban való naplózásával részletesebb Azure Cosmos DB diagnosztikai információkat kaphat a szolgáltatásnak küldött aktuális kérésről. Példahasználati esetként rögzítse a diagnosztikát minden kivételen és befejezett műveleten, ha az CosmosDiagnostics#getDuration() nagyobb, mint egy kijelölt küszöbérték (azaz ha 10 másodperces SLA-val rendelkezik, akkor 10 másodpercnél getDuration()> rögzítse a diagnosztikát). Javasoljuk, hogy ezeket a diagnosztikákat csak a teljesítménytesztelés során használja. További információkért kövesse a rögzítési diagnosztikát a Java SDK-n
Ne használjon speciális karaktereket az azonosítókban Egyes karakterek korlátozottak, és egyes azonosítókban nem használhatók: '/', '\', '?', '#'. Az általános javaslat az, hogy a váratlan viselkedés elkerülése érdekében ne használjon speciális karaktereket az azonosítókban, például az adatbázis neve, a gyűjtemény neve, az elemazonosító vagy a partíciókulcs.

Ajánlott eljárások átjáró mód használatakor

Az Azure Cosmos DB-kérések HTTPS/REST protokollon keresztül lesznek intézve, amikor átjáró módot használ. Gazdanév vagy IP-cím szerint az alapértelmezett kapcsolati korlát vonatkozik rájuk. Előfordulhat, hogy a max Csatlakozás ionPoolSize értékét egy másik értékre kell módosítania (100 és 1000 között), hogy az ügyfélkódtár több egyidejű kapcsolatot használjon az Azure Cosmos DB-hez. A Java v4 SDK-ban az alapértelmezett érték GatewayConnectionConfig#maxConnectionPoolSize 1000. Az érték módosításához másik értéket állíthat be GatewayConnectionConfig#maxConnectionPoolSize .

Ajánlott eljárások írási feladatokhoz

A nagy mennyiségű hasznos adatokkal rendelkező számítási feladatok esetén állítsa a kérési beállítást a CosmosClientBuilder#contentResponseOnWriteEnabled() következőre false: . A szolgáltatás többé nem adja vissza a létrehozott vagy frissített erőforrást az SDK-nak. Általában, mivel az alkalmazás rendelkezik a létrehozott objektummal, nem kell a szolgáltatásnak visszaadnia. A fejlécértékek továbbra is elérhetők, például egy kérelemdíj. A tartalomválasz letiltása javíthatja a teljesítményt, mivel az SDK-nak már nincs szüksége memória lefoglalására vagy a válasz törzsének szerializálására. Emellett csökkenti a hálózati sávszélesség használatát, hogy tovább segítse a teljesítményt.

Következő lépések

A Java SDK teljesítménytippjeiről további információt az Azure Cosmos DB Java SDK 4-hez készült teljesítménytippjeiben talál.

Ha többet szeretne megtudni az alkalmazás méretezéshez és nagy teljesítményhez való tervezéséről, tekintse meg a particionálást és a skálázást az Azure Cosmos DB-ben.

Kapacitástervezést szeretne végezni az Azure Cosmos DB-be való migráláshoz? A kapacitástervezéshez használhatja a meglévő adatbázisfürt adatait.