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 Batch .NET-kódtár használatával.
Feljegyzés
A Batch szolgáltatás API-támogatást nyújt a feladatok tevékenységeinek számlálásához és a Batch-készlet számítási csomópontjainak számlálásához. A Feladatszám és a Listakészlet csomópontszámának lekérése művelet meghívása 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 feladatok, 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 Batch .NET API-kódrészlet felsorolja a feladathoz társított összes feladatot, valamint az egyes tevékenységek összes tulajdonságát.
// Get a collection of all of the tasks and all of their properties for job-001
IPagedEnumerable<CloudTask> allTasks =
batchClient.JobOperations.ListTasks("job-001");
Az információk hatékonyabb listázásához alkalmazzon részletességi szintet a lekérdezésre. Adjon meg egy ODATADetailLevel objektumot a JobOperations.ListTasks metódushoz . 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.
// Configure an ODATADetailLevel specifying a subset of tasks and
// their properties to return
ODATADetailLevel detailLevel = new ODATADetailLevel();
detailLevel.FilterClause = "state eq 'completed'";
detailLevel.SelectClause = "id,commandLine,nodeInfo";
// Supply the ODATADetailLevel to the ListTasks method
IPagedEnumerable<CloudTask> completedTasks =
batchClient.JobOperations.ListTasks("job-001", detailLevel);
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. Az elemek Batch .NET API-val való listázásakor történő használatáról ODATADetailLevel
a Batch .NET Hatékony lekérdezése című szakaszában talál további információt.
Fontos
Javasoljuk, hogy mindig adjon meg egy ODATADetailLevel
objektumot a .NET API-listahívásaihoz az alkalmazás maximális hatékonysága és teljesítménye érdekében. 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
A Batch .NET és a Batch REST API-k használatával csökkentheti a lekérdezés által visszaadott elemek számát, valamint azt, hogy a lekérdezés mennyi információt ad vissza az egyes elemekhez. A lekérdezés szűkítéséhez három lekérdezési sztringtípus használható: $filter, $select és $expand.
A Batch .NET API-hoz lásd az ODATADetailLevel Osztály tulajdonságait. Tekintse át a Batch .NET Hatékony lekérdezése 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
az , $select
és $expand
a . 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.
Feljegyzé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 a kis- és nagybetűk megegyeznek a REST API-elem megfelelőivel. Ha például a .NET CloudTask osztályt használja, állam helyett állapotot kell megadnia, annak ellenére, hogy a .NET tulajdonság CloudTask.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 and
és or
a .
Ez a példa csak a futó renderelési feladatokat sorolja fel: (state eq 'running') and startswith(id, 'renderTask')
.
Kijelölés
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.
$select
Ehhez 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, $expand
statisztikai 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 sztring támogatott alkalmazásai közé tartoznak a feladatok, a feladatütemezések, a tevékenységek és a készletek felsorolása. A sztring 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 érvényes, ha a Batch .NET-et vagy a többi Batch SDK egyikét használja.
- Minden tulajdonságnév megkülönbözteti a kis- és nagybetűket, de a tulajdonságértékek nem érzéketlenek.
- A dátum/idő sztringek két formátum egyikét tartalmazhatják, és meg kell előzni.
DateTime
- 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'
- Példa W3C-DTF formátumra:
- A logikai sztringek vagy
true
false
. - Ha érvénytelen tulajdonságot vagy operátort
400 (Bad Request)
ad meg, hibaüzenet jelenik meg.
Hatékony lekérdezés a Batch .NET-ben
A Batch .NET API-ban az ODATADetailLevel osztály szűrőt, kijelölést és sztringek kibontást biztosít a műveletek listázásához. Az ODataDetailLevel
osztály három nyilvános karakterlánc-tulajdonsággal rendelkezik. Ezeket a tulajdonságokat megadhatja a konstruktorban, vagy beállíthatja közvetlenül az objektumon. Ezután adja át az ODataDetailLevel
objektumot paraméterként a különböző listaműveleteknek, például a ListPoolsnak, a ListJobsnak és a ListTasksnak.
- ODATADetailLevel.FilterClause: Korlátozza a visszaadott elemek számát.
- ODATADetailLevel.SelectClause: Adja meg, hogy az egyes elemek mely tulajdonságértékeket adják vissza.
- ODATADetailLevel.ExpandClause: Az egyes elemekhez tartozó különálló hívások helyett egyetlen API-hívás összes elemének adatait kell lekérnie.
Az alábbi kódrészlet a Batch .NET API használatával kérdezi le hatékonyan a Batch szolgáltatást egy adott készlet statisztikáihoz. A Batch-felhasználó teszt- és éles készletekkel is rendelkezik. A tesztkészlet azonosítóinak előtagja "teszt", az éles készlet azonosítói pedig "prod" előtaggal vannak elnevezve. A myBatchClient a BatchClient osztály megfelelő inicializált példánya.
// First we need an ODATADetailLevel instance on which to set the filter, select,
// and expand clause strings
ODATADetailLevel detailLevel = new ODATADetailLevel();
// We want to pull only the "test" pools, so we limit the number of items returned
// by using a FilterClause and specifying that the pool IDs must start with "test"
detailLevel.FilterClause = "startswith(id, 'test')";
// To further limit the data that crosses the wire, configure the SelectClause to
// limit the properties that are returned on each CloudPool object to only
// CloudPool.Id and CloudPool.Statistics
detailLevel.SelectClause = "id, stats";
// Specify the ExpandClause so that the .NET API pulls the statistics for the
// CloudPools 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 (CloudPool.Statistics)
detailLevel.ExpandClause = "stats";
// Now get our collection of pools, minimizing the amount of data that is returned
// by specifying the detail level that we configured above
List<CloudPool> testPools =
await myBatchClient.PoolOperations.ListPools(detailLevel).ToListAsync();
Tipp.
A Select and Expand záradékokkal konfigurált ODATADetailLevel példánya a megfelelő Get metódusoknak is átadható, például a PoolOperations.GetPool metódusnak a visszaadott adatok mennyiségének korlátozásához.
Batch REST–.NET API-leképezések
A szűrési, kijelölési és kibontott sztringek tulajdonságneveinek a REST API-megfelelőiknek kell tükrözniük mind a névben, mind a kis- és nagybetűkben. 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 oszlopban szereplő .NET API-metódusok mindegyike egy ODATADetailLevel objektumot fogad el paraméterként.
- 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 az ODATADetailLevel.FilterClause sztring létrehozásakor használhatja .
Kijelölt sztringek leképezése
- Batch .NET-típusok: Batch .NET 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 odataDetailLevel.SelectClause sztring létrehozásakor.
Példa: szűrősztring létrehozása
Az ODATADetailLevel.FilterClause szűrősztringjének 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 tevékenységet, amelynek a kilépési kódja nem volt beolvasva, jelölje be a feladathoz társított feladatokat az alkalmazandó tulajdonságsztring és az engedélyezett operátorok listájában:
Tulajdonság | Műveletek engedélyezettek | 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: kijelölési sztring létrehozása
Az ODATADetailLevel.SelectClause 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 szerint | Jegyzetek |
---|---|---|
id |
String |
The ID of the task. |
commandLine |
String |
The command line of the task. |
A kapcsolódó kijelölési sztring a következő:
id, commandLine
Kódminták
Hatékony listázó 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 JobOperations.ListTasks metódushoz, és átadja az ODATADetailLevel objektumokat. Ezek az objektumok különböző tulajdonságértékekkel vannak konfigurálva, hogy eltérjenek a visszaadandó adatok mennyisége. 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 ODATADetailLevel értéket ad vissza, amely azt határozza meg, hogy csak a id
lekérdezett entitások és state
tulajdonságok legyenek lekérve. Azt is meghatározza, hogy csak azok az entitások legyenek visszaadva, amelyek állapota a megadott DateTime
paraméter óta megváltozott.
internal static ODATADetailLevel OnlyChangedAfter(DateTime time)
{
return new ODATADetailLevel(
selectClause: "id, state",
filterClause: string.Format("stateTransitionTime gt DateTime'{0:o}'", time)
);
}
Következő lépések
- Az Azure Batch számítási erőforrás-használatának maximalizálása egyidejű csomóponti feladatokkal. Bizonyos típusú számítási feladatok kihasználhatják a párhuzamos feladatok végrehajtását nagyobb (de kevesebb) számítási csomóponton. Az ilyen forgatókönyv részleteiért tekintse meg a cikkben szereplő példaforgatókönyvet .
- Batch-megoldások monitorozása tevékenységek és csomópontok állapot szerinti számlálásával