Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.