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


Dátumok használata az Azure Cosmos DB for NoSQL-ben

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Az Azure Cosmos DB for NoSQL egy natív JSON-adatmodellen keresztül nyújt sémarugalmasságot és gazdag indexelést. Minden Azure Cosmos DB-erőforrás, beleértve az adatbázisokat, tárolókat, dokumentumokat és tárolt eljárásokat, JSON-dokumentumként modellezi és tárolja. A hordozhatóság követelménye, hogy a JSON (és az Azure Cosmos DB) csak néhány alaptípust támogat: Sztring, Szám, Logikai, Tömb, Objektum és Null. A JSON azonban rugalmas, és lehetővé teszi, hogy a fejlesztők és a keretrendszerek összetettebb típusokat képviseljenek ezekkel a primitívekkel, és objektumként vagy tömbként írja őket.

Az alaptípusok mellett számos alkalmazásnak szüksége van a DateTime dátum- és időadatok megjelenítéséhez szükséges típusra. Ez a cikk azt ismerteti, hogy a fejlesztők hogyan tárolhatják, kérdezhetik le és kérdezhetik le a dátumokat az Azure Cosmos DB-ben a .NET SDK használatával.

DateTimes tárolása

Az Azure Cosmos DB támogatja az olyan JSON-típusokat, mint a - sztring, szám, logikai, null, tömb, objektum. Nem támogatja közvetlenül a típust DateTime . A NoSQL API jelenleg nem támogatja a dátumok honosítását. Ezért sztringekként kell tárolnia a dátum- és időadatokat. A dátum- és idősztringek ajánlott formátuma az yyyy-MM-ddTHH:mm:ss.fffffffZISO 8601 UTC szabványt követi. Ajánlott az összes dátumot az Azure Cosmos DB-ben UTC formátumban tárolni. A dátumsztringek formátumba való konvertálása lehetővé teszi a dátumok lexikális rendezését. Ha nem UTC dátumokat tárol, a logikát az ügyféloldalon kell kezelni. Ha egy helyi dátum- és időértéket UTC-vé szeretne alakítani, az eltolást a JSON tulajdonságaként kell megadni/tárolni, és az ügyfél használhatja az eltolást az UTC dátum- és időérték kiszámításához.

A dátum- és idősztringeket szűrőként tartalmazó tartomány-lekérdezések csak akkor támogatottak, ha a dátum- és idősztringek mind UTC-ben vannak. A GetCurrentDateTime rendszerfüggvény a jelenlegi UTC dátumot és időpontot adja vissza az ISO 8601 sztring értékének formátumában: yyyy-MM-ddTHH:mm:ss.fffffffZ.

A legtöbb alkalmazás az alábbi okokból használhatja az alapértelmezett sztring-ábrázolásokat DateTime :

  • A sztringek összehasonlíthatók, és a DateTime-értékek relatív sorrendje megmarad, amikor sztringekké alakulnak át.
  • Ez a megközelítés nem igényel egyéni kódot vagy attribútumokat a JSON-átalakításhoz.
  • A JSON-ban tárolt dátumok emberi olvashatók.
  • Ez a megközelítés kihasználhatja az index előnyeit a gyors lekérdezési teljesítmény érdekében.

A következő kódrészlet például egy Order két DateTime tulajdonságot tartalmazó objektumot tárol , ShipDate és OrderDate a .NET SDK-t használó dokumentumként:

public class Order
{
    [JsonProperty(PropertyName="id")]
    public string Id { get; set; }
    public DateTime OrderDate { get; set; }
    public DateTime ShipDate { get; set; }
    public double Total { get; set; }
}

await container.CreateItemAsync(
    new Order
    {
        Id = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        OrderDate = DateTime.UtcNow.AddDays(-30),
        ShipDate = DateTime.UtcNow.AddDays(-14),
        Total = 113.39
    });

Ez a dokumentum a következő struktúrában van tárolva:

{
  "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
  "OrderDate": "2014-09-15T23:14:25.7251173Z",
  "ShipDate": "2014-09-30T23:14:25.7251173Z",
  "Total": 113.39
}

A DateTimest unix-időbélyegként is tárolhatja, azaz az 1970. január 1.-től eltelt másodpercek számát jelképező számként. Az Azure Cosmos DB for NoSQL belső időbélyeg (_ts) tulajdonsága ezt a megközelítést követi. Az osztály segítségével számként szerializálhatja a UnixDateTimeConverter dátumokat és az időpontokat.

Dátum és idő lekérdezése a LINQ-ban

A .NET SDK automatikusan támogatja a Language Integrated Query (LINQ) használatával tárolt adatok lekérdezését. Az alábbi kódrészlet például egy LINQ-lekérdezést jelenít meg, amely az elmúlt három napban kiszállított rendeléseket szűri:

IQueryable<Order> orders = container
    .GetItemLinqQueryable<Order>(allowSynchronousQueryExecution: true)
    .Where(o => o.ShipDate >= DateTime.UtcNow.AddDays(-3));

A LINQ-lekérdezés a következő SQL-utasításra lesz lefordítva, és az Azure Cosmos DB-n hajtja végre:

SELECT
    *
FROM
    root
WHERE
    (root["ShipDate"] >= "2014-09-30T23:14:25.7251173Z")

A lekérdezés nyelvével és a LINQ-szolgáltatóval kapcsolatos további információkért tekintse meg a LINQ–SQL-fordítást.

Tartomány-lekérdezések indexelési dátuma és ideje

A lekérdezések gyakran szerepelnek az értékekben DateTime . A lekérdezések hatékony végrehajtásához indexet kell definiálnia a lekérdezés szűrőjének bármely tulajdonságán.

További információ az indexelési szabályzatok konfigurálásáról: indexelési szabályzatok.