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


Elem olvasása az Azure Cosmos DB for NoSQL-ben a .NET használatával

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Az Azure Cosmos DB elemei egy tárolóban tárolt adott entitást jelölnek. A NoSQL API-ban egy elem JSON-formátumú adatokat tartalmaz egyedi azonosítóval.

Egyedi azonosítókkal rendelkező elemek olvasása

Az Azure Cosmos DB for NoSQL minden eleme egyedi azonosítóval rendelkezik, amelyet a id tulajdonság határoz meg. A tároló hatókörén belül két elem nem oszthatja meg ugyanazt az egyedi azonosítót. Az Azure Cosmos DB azonban megköveteli az elem egyedi azonosítóját és partíciókulcs-értékét az elem gyors olvasásához . Ha csak az egyedi azonosító érhető el, akkor kevésbé hatékony lekérdezést kell végrehajtania az elem több logikai partíción való kereséséhez. A pontolvasásokkal és lekérdezésekkel kapcsolatos további információkért tekintse meg az adatok olvasási költségeinek optimalizálását ismertető cikket.

Elem olvasása

Feljegyzés

A cikkben szereplő példák feltételezik, hogy már definiált egy C#-típust a Product (Termék) nevű adatok megjelenítéséhez:

// C# record type for items in the container
public record Product(
    string id,
    string category,
    string name,
    int quantity,
    bool sale
);

Egy elem pontolvasásának végrehajtásához hívja meg az alábbi módszerek egyikét:

Elem aszinkron olvasása

Az alábbi példapont egyetlen elemet olvas be aszinkron módon, és egy deszerializált elemet ad vissza a megadott általános típus használatával:

// Read existing item from container
Product readItem = await container.ReadItemAsync<Product>(
    id: "68719518388",
    partitionKey: new PartitionKey("gear-surf-surfboards")
);

A Database.ReadItemAsync<> metódus beolvassa az elemet, és egy típusú ItemResponse<>objektumot ad vissza. Az ItemResponse<> típus örökli a Response<> típust, amely implicit konverziós operátort tartalmaz az objektum általános típussá alakításához. Az implicit operátorokkal kapcsolatos további információkért tekintse meg a felhasználó által definiált konverziós operátorokat.

Másik lehetőségként visszaadhatja az ItemResponse<> általános típusát, és explicit módon lekérheti az erőforrást. Az általánosabb ItemResponse<> típus hasznos metaadatokat is tartalmaz az alapul szolgáló API-műveletről. Ebben a példában a kérelemegység díjával kapcsolatos metaadatok a RequestCharge tulajdonság használatával lesznek összegyűjtve.

// Read existing item from container
ItemResponse<Product> readResponse = await container.ReadItemAsync<Product>(
    id: "68719518388",
    partitionKey: new PartitionKey("gear-surf-surfboards")
);

// Get response metadata
double requestUnits = readResponse.RequestCharge;
HttpStatusCode statusCode = readResponse.StatusCode;

// Explicitly get item
Product readItemExplicit = readResponse.Resource;

Elem olvasása streamként aszinkron módon

Ez a példa közvetlenül adatfolyamként olvas be egy elemet:

// Read existing item from container
using ResponseMessage readItemStreamResponse = await container.ReadItemStreamAsync(
    id: "68719518388",
    partitionKey: new PartitionKey("gear-surf-surfboards")
);

// Get stream from response
using StreamReader readItemStreamReader = new(readItemStreamResponse.Content);

// (optional) Get stream content
string content = await readItemStreamReader.ReadToEndAsync();

A Container.ReadItemStreamAsync metódus az elemet Stream a tartalom deszerializálása nélkül adja vissza.

Ha nem tervezi közvetlenül deszerializálni az elemeket, a stream API-k használatával javíthatja a teljesítményt azáltal, hogy közvetlenül az alkalmazás következő összetevőjének adja át az elemet streamként. Az SDK nagy teljesítményű forgatókönyvekhez való optimalizálásával kapcsolatos további tippekért tekintse meg az SDK teljesítménytippeit.

Több elem aszinkron olvasása

Ebben a példában az egyedi azonosító- és partíciókulcs-párokat tartalmazó rekordok listája több elem keresésére és lekérésére szolgál:

// Create partition key object
PartitionKey partitionKey = new("gear-surf-surfboards");

// Create list of tuples for each item
List<(string, PartitionKey)> itemsToFind = new()
{
    ("68719518388", partitionKey),
    ("68719518381", partitionKey)
};

// Read multiple items
FeedResponse<Product> feedResponse = await container.ReadManyItemsAsync<Product>(
    items: itemsToFind
);

foreach (Product item in feedResponse)
{
    Console.WriteLine($"Found item:\t{item.name}");
}

Container.ReadManyItemsAsync<> A megadott egyedi azonosítók és partíciókulcsok alapján visszaadja az elemek listáját. Ennek a műveletnek az a célja, hogy nagyobb késést biztosítsunk, mint a nagy számú független elem beolvasására szolgáló utasításokkal rendelkező IN lekérdezések.

Következő lépések

Most, hogy elolvasta a különböző elemeket, használja a következő útmutatót az elemek lekérdezéséhez.