Lekérdezések létrehozása a Batch-erőforrások hatékony listázásához

A legtöbb Azure Batch-alkalmazás figyeli vagy más olyan műveleteket végez, amelyek lekérdezik a Batch szolgáltatást. Az ilyen lista lekérdezések gyakran rendszeres időközönként történnek. Ha például egy feladat várólistára helyezett tevékenységeit szeretné ellenőrizni, az adott feladat minden tevékenységéről adatokat kell lekérnie. A Batch szolgáltatás által a lekérdezésekhez visszaadott adatok mennyiségének csökkentése javítja az alkalmazás teljesítményét. Ez a cikk bemutatja, hogyan hozhat létre és hajthat végre ilyen lekérdezéseket hatékonyan. Szűrt lekérdezéseket hozhat létre Batch-feladatokhoz, feladatokhoz, számítási csomópontokhoz és egyéb erőforrásokhoz a Azure. Compute.Batch kódtár.

Megjegyzés

A Batch szolgáltatás API-támogatást nyújt a feladatok számlálásához egy munkában, és a Batch-pool számítási csomópontjainak számlálásához. A Feladatszámok lekérése és a Készlet csomópontszámok listázása műveletek meghívhatóak a lista lekérdezés használata helyett. Ezek a hatékonyabb műveletek azonban korlátozottabb információkat adnak vissza, amelyek esetleg nem naprakészek. További információ: Tevékenységek és számítási csomópontok számlálása állapot szerint.

Részletességi szint megadása

Több ezer entitás, például állások, feladatok és számítási csomópontok lehetnek egy éles Batch-alkalmazásban. Az erőforrásokról készült összes lekérdezéshez nagy mennyiségű adat kerül a Batch szolgáltatásból az alkalmazásba. Korlátozza, hogy a lekérdezés hány elemet és milyen adatokat ad vissza a teljesítmény javítása érdekében.

Ez a Azure.Compute.Batch API-kódrészlet felsorolja a feladathoz társított összes feladatot, valamint az egyes feladatok összes tulajdonságát.

// Get a collection of all of the tasks and all of their properties for job-001
AsyncPageable<BatchTask> allTasks = batchClient.GetTasksAsync("job-001");

Az információk hatékonyabb listázásához alkalmazzon részletességi szintet a lekérdezésre. Adja át a filter, select és expand sztringeket a BatchClient.GetTasks metódusnak. Ez a kódrészlet csak a befejezett tevékenységek azonosító- és parancssori és számítási csomópontinformációs tulajdonságait adja vissza.

// Specify filter and select strings to return only a subset of tasks and their properties.
AsyncPageable<BatchTask> completedTasks = batchClient.GetTasksAsync(
    jobId: "job-001",
    filter: "state eq 'completed'",
    select: new[] { "id", "commandLine", "nodeInfo" });

Ebben a példában, ha több ezer feladat van a feladatban, a második lekérdezés eredményei általában gyorsabban lesznek visszaadva, mint az első lekérdezésből. A filter, a select és a expand paraméterek Azure.Compute.Batch API-val való használatáról további információt a Hatékony lekérdezés az Azure.Compute.Batchben című szakaszban talál.

Fontos

Erősen javasoljuk, hogy mindig filter, select és (adott esetben) expand sztringeket adjon meg az .NET API-listahívásainak, hogy maximális hatékonyságot és teljesítményt biztosítsunk az alkalmazás számára. Egy részletes szint megadásával csökkentheti a Batch szolgáltatás válaszidejének számát, javíthatja a hálózat kihasználtságát, és minimalizálhatja az ügyfélalkalmazások memóriahasználatát.

Lekérdezési sztringek használata

Használhatja a Azure.Compute.Batch és a Batch REST API-kat annak csökkentésére, hogy egy lekérdezés hány elemet, valamint az egyes elemekről mennyi információt ad vissza. A lekérdezés szűkítéséhez három lekérdezési sztringtípus használható: $filter, $select és $expand.

Az Azure.Compute.Batch API esetében tekintse meg a BatchClient referenciáját ahhoz a list metódushoz, amelynek a filter, select és expand paramétereit használni szeretné. Tekintse át az Efficient querying in Azure.Compute.Batch című szakaszt is.

A Batch REST API-val kapcsolatban lásd a Batch REST API-referenciát. Keresse meg a lekérdezni kívánt erőforrás listahivatkozását . Ezután tekintse át az URI-paraméterek szakaszt $filter, $select és $expand részleteiért. Lásd például a Készlet – Lista URI-paramétereit. Azt is megtudhatja , hogyan végezhet hatékony Batch-lekérdezéseket az Azure CLI-vel.

Megjegyzés

A három lekérdezési sztringtípus bármelyikének létrehozásakor meg kell győződnie arról, hogy a tulajdonságnevek és azok kis- és nagybetű használata megegyeznek a REST API elemekkel. Ha például a .NET BatchTask osztályt használja, State helyett state kell megadnia, annak ellenére, hogy a .NET tulajdonság BatchTask.State. További információkért tekintse meg a .NET és a REST API-k közötti tulajdonságleképezéseket.

Szűrő

A $filter kifejezési sztring csökkenti a visszaadott elemek számát. Például csak a feladatok futó tevékenységeit listázhatja, vagy csak a tevékenységek futtatására kész számítási csomópontokat.

Ez a sztring egy vagy több kifejezésből áll, egy tulajdonságnévből, operátorból és értékből álló kifejezéssel. A megadható tulajdonságok a lekérdezett entitástípusokra, valamint az egyes tulajdonságokhoz támogatott operátorokra vonatkoznak. Több kifejezés is kombinálható a logikai operátorok, mint például and és or segítségével.

Ez a példa csak a futó renderelési feladatokat sorolja fel: (state eq 'running') and startswith(id, 'renderTask').

Kiválaszt

A $select kifejezési sztring korlátozza az egyes elemekhez visszaadott tulajdonságértékeket. Megadhatja a vesszővel elválasztott tulajdonságnevek listáját, és csak ezek a tulajdonságértékek lesznek visszaadva a lekérdezés eredményeiben szereplő elemekhez. A lekérdezett entitástípus bármelyik tulajdonságát megadhatja.

Ez a példa azt határozza meg, hogy minden tevékenységhez csak három tulajdonságértéket kell visszaadni: id, state, stateTransitionTime.

Kibontás

A $expand kifejezési sztring csökkenti a bizonyos információk beszerzéséhez szükséges API-hívások számát. Ezzel a sztringgel több információt kaphat az egyes elemekről egyetlen API-hívással. Ez a módszer segít javítani a teljesítményt az API-hívások csökkentésével. Használjon sztringet $expand az entitások listájának lekérése és az egyes listaelemek adatainak lekérése helyett.

$selectEhhez hasonlóan azt határozza meg, $expand hogy bizonyos adatok szerepeljenek-e a lista lekérdezési eredményei között. Ha minden tulajdonságra szükség van, és nincs megadva kijelölési sztring, $expandstatisztikai adatok lekéréséhez kell használni. Ha egy kijelölési sztringet használ a tulajdonságok egy részhalmazának lekéréséhez, akkor stats meg lehet adni a kijelölési sztringben, és $expand nem kell megadni.

A karakterlánc támogatott alkalmazásai közé tartoznak a munkák, a feladatütemezések, a feladatok és a készletek felsorolása. A karakterlánc jelenleg csak a statisztikai adatokat támogatja.

Ez a példa azt határozza meg, hogy a lista minden eleméhez statisztikai adatokat kell visszaadni: stats.

Sztringek szűrésére, kijelölésére és kibontára vonatkozó szabályok

  • Győződjön meg arról, hogy a tulajdonságok nevei a szűrőben, a kijelölésben és a sztringek kibontásakor ugyanúgy jelennek meg, mint a Batch REST API-ban. Ez a szabály akkor is vonatkozik, ha az Azure.Compute.Batch vagy a többi Batch SDK valamelyikét használja.
  • Minden tulajdonságnév megkülönbözteti a kis- és nagybetűket, de a tulajdonságértékek nem tesznek különbséget köztük.
  • A dátum/idő sztringek kétféle formátumot használhatnak, és a(z) DateTime-t kell eléjük helyezni.
    • Példa W3C-DTF formátumra: creationTime gt DateTime'2011-05-08T08:49:37Z'
    • Példa RFC 1123 formátumra: creationTime gt DateTime'Sun, 08 May 2011 08:49:37 GMT'
  • A logikai sztringek vagy true vagy false.
  • Ha érvénytelen tulajdonságot vagy operátort 400 (Bad Request) ad meg, hibaüzenet jelenik meg.

Hatékony lekérdezés az Azure Compute Batchben

Az Azure.Compute.Batch API-ban a BatchClient lista metódusai közvetlenül fogadják a filter, select és expand paramétereket:

  • filter: Korlátozza a visszaadott elemek számát.
  • select: Adja meg, hogy mely tulajdonságértékek lesznek visszaadva az egyes elemekkel.
  • expand: Adatok lekérése egyetlen API-hívás összes eleméhez az egyes elemek külön hívásai helyett.

Az alábbi kódrészlet az Azure.Compute.Batch API-t használja a Batch szolgáltatás hatékony lekérdezésére egy adott készletcsoportra vonatkozó statisztikákhoz. A Batch-felhasználó teszt- és éles készletekkel is rendelkezik. A tesztcsomag azonosítói "teszt" előtaggal, az éles csomag azonosítói pedig "prod" előtaggal vannak ellátva. A myBatchClient a BatchClient osztály megfelelő inicializált példánya.

// Pull only the "test" pools, and limit the data crossing the wire by selecting only
// the Id and Statistics properties. Use expand="stats" so the .NET API pulls the
// statistics for the BatchPools in a single underlying REST API call. Note that we
// use the pool's REST API element name "stats" here as opposed to "Statistics" as it
// appears in the .NET API (BatchPool.Statistics).
List<BatchPool> testPools = new List<BatchPool>();
await foreach (BatchPool pool in myBatchClient.GetPoolsAsync(
    filter: "startswith(id, 'test')",
    select: new[] { "id", "stats" },
    expand: new[] { "stats" }))
{
    testPools.Add(pool);
}

Tipp.

Ugyanezeket filtera select paramétereket expandis átadhatja a megfelelő Get metódusoknak, például a BatchClient.GetPoolnak a visszaadott adatok mennyiségének korlátozásához.

Batch REST–.NET API-leképezések

A szűrési, kiválasztási és kibontási sztringek tulajdonságneveinek a REST API megfelelőiknek kell tükrözniük a nevekben és a kis- és nagybetűk használatában egyaránt. Az alábbi táblázatok a .NET és a REST API megfelelői közötti leképezéseket tartalmazzák.

Szűrősztringek leképezése

  • .NET listametódusok: Az ebben az oszlopban szereplő .NET API-metódusok mindegyike paraméterként fogadja el a(z) filter, select és expand sztringeket.
  • REST-listakérések: Az oszlopban felsorolt MINDEN REST API-lap tartalmaz egy táblát, amely a szűrősztringekben engedélyezett tulajdonságokat és műveleteket tartalmazza. Ezeket a tulajdonságneveket és műveleteket egy filter sztring létrehozásakor használhatja.
.NET-lista metódusai REST-listakérések
BatchAccountResource.GetBatchAccountCertificates A tanúsítványok listázása egy fiókban
BatchClient.GetTaskFiles Feladathoz társított fájlok listázása
BatchClient.GetJobPreparationAndReleaseTaskStatuses A feladat előkészítésének és a feladat kiadási feladatainak állapotának listázása
BatchClient.GetJobs Feladatok listázása egy fiókban
BatchClient.GetNodeFiles A csomópont fájljainak listázása
BatchClient.GetTasks Feladathoz társított tevékenységek listázása
BatchClient.GetJobSchedules Munkaütemezések listázása egy fiókban
BatchClient.GetJobsFromSchedule Feladatütemezéshez társított feladatok listázása
BatchClient.GetNodes A készlet számítási csomópontjainak listázása
BatchClient.GetPools A poolok felsorolása egy fiókban

Meghatározott karaktersorozatok leképezése

  • Azure. Compute.Batch-típusok: Azure. Compute.Batch API-típusok.
  • REST API-entitások: Az oszlop minden oldala tartalmaz egy vagy több táblát, amelyek a típus REST API-tulajdonságneveit sorolják fel. Ezeket a tulajdonságneveket a rendszer a kijelölt sztringek létrehozásakor használja. Ugyanezeket a tulajdonságneveket használja, amikor egy select sztringet hoz létre.
Azure.Compute.Batch-típusok REST API-entitások
BatchJob Információk lekérése egy feladatról
BatchJobSchedule A feladatütemezéssel kapcsolatos információk lekérése
BatchNode Információk lekérése egy csomópontról
BatchPool Egy erőforráskészlet információinak lekérése
BatchTask Információk lekérése egy tevékenységről

Példa: szűrősztring létrehozása

Egy listametódus filter paraméteréhez tartozó szűrősztring létrehozásához keresse meg a megfelelő REST API-oldalt. A választható tulajdonságok és a támogatott operátorok az első többsoros táblázatban találhatók. Ha például le szeretné kérni az összes olyan feladatot, amelynek kilépési kódja nem nulla, ellenőrizze a feladathoz társított feladatok listáját az alkalmazandó tulajdonságsztring és az engedélyezett operátorok tekintetében.

Tulajdonság Engedélyezett műveletek Típus
executionInfo/exitCode eq, ge, gt, le , lt Int

A kapcsolódó szűrősztring a következő:

(executionInfo/exitCode lt 0) or (executionInfo/exitCode gt 0)

Példa: választási karakterlánc létrehozása

Sztring select létrehozásához keresse meg a listázandó entitáshoz tartozó REST API-oldalt . A választható tulajdonságok és a támogatott operátorok az első többsoros táblázatban találhatók. Ha például csak az azonosítót és a parancssort szeretné lekérni a listában szereplő egyes tevékenységekhez, jelölje be a Tevékenység adatainak lekérése jelölőnégyzetet:

Tulajdonság Típus Jegyzetek
id String The ID of the task.
commandLine String The command line of the task.

A kapcsolódó kijelölő string a következő:

id, commandLine

Kódminták

Hatékony listalapú lekérdezések

Az EfficientListQueries mintaprojekt azt mutatja be, hogy a listák hatékony lekérdezése milyen hatással van az alkalmazás teljesítményére. Ez a C#-konzolalkalmazás sok feladatot hoz létre és ad hozzá egy feladathoz. Ezután az alkalmazás több hívást indít a BatchClient.GetTasks metódushoz, és különböző filter, selectés expand paraméterértékeket ad át a visszaadandó adatok mennyiségének módosítása érdekében. Ez a minta a következőhöz hasonló kimenetet hoz létre:

Adding 5000 tasks to job jobEffQuery...
5000 tasks added in 00:00:47.3467587, hit ENTER to query tasks...

4943 tasks retrieved in 00:00:04.3408081 (ExpandClause:  | FilterClause: state eq 'active' | SelectClause: id,state)
0 tasks retrieved in 00:00:00.2662920 (ExpandClause:  | FilterClause: state eq 'running' | SelectClause: id,state)
59 tasks retrieved in 00:00:00.3337760 (ExpandClause:  | FilterClause: state eq 'completed' | SelectClause: id,state)
5000 tasks retrieved in 00:00:04.1429881 (ExpandClause:  | FilterClause:  | SelectClause: id,state)
5000 tasks retrieved in 00:00:15.1016127 (ExpandClause:  | FilterClause:  | SelectClause: id,state,environmentSettings)
5000 tasks retrieved in 00:00:17.0548145 (ExpandClause: stats | FilterClause:  | SelectClause: )

Sample complete, hit ENTER to continue...

A példa azt mutatja, hogy a visszaadott tulajdonságok és elemek számának korlátozásával jelentősen csökkentheti a lekérdezési válaszidőket. Ezt és más mintaprojekteket a GitHub azure-batch-samples adattárában találja.

BatchMetrics-kódtár

Az alábbi BatchMetrics-mintaprojekt bemutatja, hogyan figyelheti hatékonyan az Azure Batch-feladatok előrehaladását a Batch API használatával.

Ez a minta egy .NET-osztálytárprojektet tartalmaz, amelyet beépíthet saját projektjeibe. Van egy egyszerű parancssori program is, amely bemutatja a kódtár használatát.

A projekten belüli mintaalkalmazás a következő műveleteket mutatja be:

  • Adott attribútumok kiválasztása csak a szükséges tulajdonságok letöltéséhez
  • Szűrés az állapotváltási időkre, hogy csak a legutóbbi lekérdezés óta történt módosításokat töltse le

Az alábbi metódus például a BatchMetrics könyvtárban jelenik meg. Egy olyan rendezett párt ad vissza, amely select és filter sztringeket tartalmaz; ezek megadják, hogy a lekérdezett entitások esetében csak a id és state tulajdonságokat kell lekérni, és hogy csak azok az entitások legyenek visszaadva, amelyek állapota a megadott DateTime paraméter óta megváltozott.

return (
    Filter: string.Format("stateTransitionTime gt DateTime'{0:o}'", time),
    Select: new[] { "id", "state" });

Következő lépések