Využívání databáze dokumentů Azure Cosmos DB v Xamarin.Forms
Databáze dokumentů Azure Cosmos DB je databáze NoSQL, která poskytuje přístup k dokumentům JSON s nízkou latencí a nabízí rychlou, vysoce dostupnou a škálovatelnou databázovou službu pro aplikace, které vyžadují bezproblémové škálování a globální replikaci. Tento článek vysvětluje, jak pomocí klientské knihovny Azure Cosmos DB .NET Standard integrovat databázi dokumentů Azure Cosmos DB do Xamarin.Forms aplikace.
Video o službě Microsoft Azure Cosmos DB
Účet databáze dokumentů Azure Cosmos DB je možné zřídit pomocí předplatného Azure. Každý databázový účet může mít nula nebo více databází. Databáze dokumentů ve službě Azure Cosmos DB je logický kontejner pro kolekce dokumentů a uživatele.
Databáze dokumentů Azure Cosmos DB může obsahovat nula nebo více kolekcí dokumentů. Každá kolekce dokumentů může mít jinou úroveň výkonu, což umožňuje zadat větší propustnost pro často používané kolekce a menší propustnost pro zřídka používané kolekce.
Každá kolekce dokumentů se skládá z nuly nebo více dokumentů JSON. Dokumenty v kolekci jsou bez schématu a proto nemusí sdílet stejnou strukturu nebo pole. Při přidání dokumentů do kolekce dokumentů je Azure Cosmos DB automaticky indexuje a zpřístupní se k dotazování.
Pro účely vývoje je možné databázi dokumentů využívat také prostřednictvím emulátoru. Pomocí emulátoru je možné vyvíjet a testovat aplikace místně bez vytvoření předplatného Azure nebo bez jakýchkoli nákladů. Další informace o emulátoru najdete v tématu Místní vývoj pomocí emulátoru služby Azure Cosmos DB.
Tento článek a doprovodná ukázková aplikace ukazuje aplikaci seznamu úkolů, ve které jsou úlohy uložené v databázi dokumentů Azure Cosmos DB. Další informace o ukázkové aplikaci najdete v tématu Vysvětlení ukázky.
Další informace o službě Azure Cosmos DB najdete v dokumentaci ke službě Azure Cosmos DB.
Poznámka:
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
Nastavení
Proces integrace databáze dokumentů Azure Cosmos DB do Xamarin.Forms aplikace je následující:
- Vytvořit účet služby Azure Cosmos DB. Další informace najdete v tématu Vytvoření účtu služby Azure Cosmos DB.
- Přidejte balíček NuGet klientské knihovny .NET Standard služby Azure Cosmos DB do projektů platformy v Xamarin.Forms řešení.
- Přidejte
using
direktivy proMicrosoft.Azure.Documents
třídy ,Microsoft.Azure.Documents.Client
aMicrosoft.Azure.Documents.Linq
obory názvů, které budou přistupovat k účtu služby Azure Cosmos DB.
Po provedení těchto kroků je možné klientskou knihovnu Azure Cosmos DB .NET Standard použít ke konfiguraci a provádění požadavků na databázi dokumentů.
Poznámka:
Klientskou knihovnu Azure Cosmos DB .NET Standard je možné nainstalovat pouze do projektů platformy, a ne do projektu PCL (Portable Class Library). Proto je ukázková aplikace projektem sdíleného přístupu (SAP), aby nedocházelo k duplikaci kódu. Třídu DependencyService
však lze použít v projektu PCL k vyvolání kódu klientské knihovny .NET Standard služby Azure Cosmos DB obsaženého v projektech specifických pro platformu.
Využívání účtu služby Azure Cosmos DB
Typ DocumentClient
zapouzdřuje koncový bod, přihlašovací údaje a zásady připojení používané pro přístup k účtu služby Azure Cosmos DB a slouží ke konfiguraci a spouštění požadavků na tento účet. Následující příklad kódu ukazuje, jak vytvořit instanci této třídy:
DocumentClient client = new DocumentClient(new Uri(Constants.EndpointUri), Constants.PrimaryKey);
Identifikátor URI a primární klíč služby Azure Cosmos DB musí být poskytnuty konstruktoru DocumentClient
. Ty je možné získat z webu Azure Portal. Další informace najdete v tématu Připojení k účtu služby Azure Cosmos DB.
Vytvoření databáze
Databáze dokumentů je logický kontejner pro kolekce dokumentů a uživatele a lze ji vytvořit na webu Azure Portal nebo programově pomocí DocumentClient.CreateDatabaseIfNotExistsAsync
této metody:
public async Task CreateDatabase(string databaseName)
{
...
await client.CreateDatabaseIfNotExistsAsync(new Database
{
Id = databaseName
});
...
}
Metoda CreateDatabaseIfNotExistsAsync
určuje Database
objekt jako argument s objektem Database
určujícím název databáze jako jeho Id
vlastnost. Metoda CreateDatabaseIfNotExistsAsync
vytvoří databázi, pokud neexistuje, nebo vrátí databázi, pokud již existuje. Ukázková aplikace však ignoruje všechna data vrácená metodou CreateDatabaseIfNotExistsAsync
.
Poznámka:
Metoda CreateDatabaseIfNotExistsAsync
vrátí Task<ResourceResponse<Database>>
objekt a stavový kód odpovědi lze zkontrolovat, zda byla vytvořena databáze nebo zda byla vrácena existující databáze.
Vytvoření kolekce dokumentů
Kolekce dokumentů je kontejner pro dokumenty JSON a dá se vytvořit na webu Azure Portal nebo programově pomocí DocumentClient.CreateDocumentCollectionIfNotExistsAsync
metody:
public async Task CreateDocumentCollection(string databaseName, string collectionName)
{
...
// Create collection with 400 RU/s
await client.CreateDocumentCollectionIfNotExistsAsync(
UriFactory.CreateDatabaseUri(databaseName),
new DocumentCollection
{
Id = collectionName
},
new RequestOptions
{
OfferThroughput = 400
});
...
}
Metoda CreateDocumentCollectionIfNotExistsAsync
vyžaduje dva povinné argumenty – název databáze zadaný jako Uri
a DocumentCollection
objekt. Objekt DocumentCollection
představuje kolekci dokumentů, jejíž název je určen vlastností Id
. Metoda CreateDocumentCollectionIfNotExistsAsync
vytvoří kolekci dokumentů, pokud neexistuje, nebo vrátí kolekci dokumentů, pokud již existuje. Ukázková aplikace však ignoruje všechna data vrácená metodou CreateDocumentCollectionIfNotExistsAsync
.
Poznámka:
Metoda CreateDocumentCollectionIfNotExistsAsync
vrátí Task<ResourceResponse<DocumentCollection>>
objekt a stavový kód odpovědi lze zkontrolovat, zda byla vytvořena kolekce dokumentů nebo zda byla vrácena existující kolekce dokumentů.
CreateDocumentCollectionIfNotExistsAsync
Volitelně může metoda také zadat RequestOptions
objekt, který zapouzdřuje možnosti, které lze zadat pro požadavky vydané pro účet služby Azure Cosmos DB. Vlastnost RequestOptions.OfferThroughput
se používá k definování úrovně výkonu kolekce dokumentů a v ukázkové aplikaci je nastavena na 400 jednotek žádostí za sekundu. Tato hodnota by se měla zvýšit nebo snížit v závislosti na tom, jestli bude kolekce často nebo zřídka přístupná.
Důležité
Všimněte si, že CreateDocumentCollectionIfNotExistsAsync
metoda vytvoří novou kolekci s rezervovanou propustností, která má vliv na ceny.
Načítání dokumentů kolekce dokumentů
Obsah kolekce dokumentů lze načíst vytvořením a spuštěním dotazu na dokument. Pomocí metody se vytvoří dotaz na DocumentClient.CreateDocumentQuery
dokument:
public async Task<List<TodoItem>> GetTodoItemsAsync()
{
...
var query = client.CreateDocumentQuery<TodoItem>(collectionLink)
.AsDocumentQuery();
while (query.HasMoreResults)
{
Items.AddRange(await query.ExecuteNextAsync<TodoItem>());
}
...
}
Tento dotaz asynchronně načte všechny dokumenty ze zadané kolekce a umístí dokumenty do List<TodoItem>
kolekce pro zobrazení.
Metoda CreateDocumentQuery<T>
určuje Uri
argument, který představuje kolekci, která by se měla dotazovat na dokumenty. V tomto příkladu collectionLink
je proměnná pole na úrovni třídy, které určuje Uri
kolekci dokumentů pro načtení dokumentů z:
Uri collectionLink = UriFactory.CreateDocumentCollectionUri(Constants.DatabaseName, Constants.CollectionName);
Metoda CreateDocumentQuery<T>
vytvoří dotaz, který se spouští synchronně, a vrátí IQueryable<T>
objekt. Metoda však převede IQueryable<T>
objekt na IDocumentQuery<T>
objekt, AsDocumentQuery
který lze spustit asynchronně. Asynchronní dotaz se provede metodou IDocumentQuery<T>.ExecuteNextAsync
, která načte další stránku výsledků z databáze dokumentů s IDocumentQuery<T>.HasMoreResults
vlastností označující, zda se z dotazu mají vrátit další výsledky.
Dokumenty lze filtrovat na straně serveru zahrnutím Where
klauzule do dotazu, která aplikuje predikát filtrování na dotaz proti kolekci dokumentů:
var query = client.CreateDocumentQuery<TodoItem>(collectionLink)
.Where(f => f.Done != true)
.AsDocumentQuery();
Tento dotaz načte všechny dokumenty z kolekce, jejichž Done
vlastnost je rovna false
.
Vložení dokumentu do kolekce dokumentů
Dokumenty jsou uživatelem definovaný obsah JSON a lze je vložit do kolekce dokumentů pomocí DocumentClient.CreateDocumentAsync
metody:
public async Task SaveTodoItemAsync(TodoItem item, bool isNewItem = false)
{
...
await client.CreateDocumentAsync(collectionLink, item);
...
}
Metoda CreateDocumentAsync
určuje Uri
argument, který představuje kolekci, do které má být dokument vložen, a object
argument, který představuje dokument, který má být vložen.
Nahrazení dokumentu v kolekci dokumentů
Dokumenty lze v kolekci dokumentů nahradit metodou DocumentClient.ReplaceDocumentAsync
:
public async Task SaveTodoItemAsync(TodoItem item, bool isNewItem = false)
{
...
await client.ReplaceDocumentAsync(UriFactory.CreateDocumentUri(Constants.DatabaseName, Constants.CollectionName, item.Id), item);
...
}
Metoda ReplaceDocumentAsync
určuje Uri
argument, který představuje dokument v kolekci, které by měly být nahrazeny, a object
argument, který představuje aktualizovaná data dokumentu.
Odstranění dokumentu z kolekce dokumentů
Dokument lze odstranit z kolekce dokumentů pomocí DocumentClient.DeleteDocumentAsync
metody:
public async Task DeleteTodoItemAsync(string id)
{
...
await client.DeleteDocumentAsync(UriFactory.CreateDocumentUri(Constants.DatabaseName, Constants.CollectionName, id));
...
}
Metoda DeleteDocumentAsync
určuje Uri
argument, který představuje dokument v kolekci, která by měla být odstraněna.
Odstranění kolekce dokumentů
Kolekci dokumentů lze odstranit z databáze pomocí DocumentClient.DeleteDocumentCollectionAsync
metody:
await client.DeleteDocumentCollectionAsync(collectionLink);
Metoda DeleteDocumentCollectionAsync
určuje Uri
argument, který představuje kolekci dokumentů, která se má odstranit. Všimněte si, že vyvolání této metody odstraní také dokumenty uložené v kolekci.
Odstranění databáze
Databázi je možné odstranit z účtu databáze Azure Cosmos DB pomocí DocumentClient.DeleteDatabaesAsync
této metody:
await client.DeleteDatabaseAsync(UriFactory.CreateDatabaseUri(Constants.DatabaseName));
Metoda DeleteDatabaseAsync
určuje Uri
argument, který představuje databázi, která má být odstraněna. Všimněte si, že vyvolání této metody odstraní také kolekce dokumentů uložené v databázi a dokumenty uložené v kolekcích dokumentů.
Shrnutí
Tento článek vysvětluje, jak pomocí klientské knihovny Azure Cosmos DB .NET Standard integrovat databázi dokumentů Azure Cosmos DB do Xamarin.Forms aplikace. Databáze dokumentů Azure Cosmos DB je databáze NoSQL, která poskytuje přístup k dokumentům JSON s nízkou latencí a nabízí rychlou, vysoce dostupnou a škálovatelnou databázovou službu pro aplikace, které vyžadují bezproblémové škálování a globální replikaci.