Tra i numerosi servizi PaaS offerti dalla piattaforma cloud di Microsoft, troviamo Cosmos DB, un database distribuito a livello globale con prestazioni garantite, capace di supportare il modello NoSQL, tabelle e grafi allo stesso tempo.
Quando usiamo il modello documentale è importante organizzare i propri grafi di oggetti partizionando le collezioni, al fine di migliorare l'allocazione, che non può superare i 10 GB, e di garantire lo scaling orizzontale. Nell'effettuare query sulle collezioni, possiamo ricercare per indici che non permettono una ricerca ottimizzata, qualora non l'arricchiamo indicando anche il campo di partizionamento, costringendo il motore a cercare in tutte le partizioni.
Questa situazione è inevitabile, ma possiamo migliorare le prestazioni di esecuzione della query andando a intervenire sul client disponibile con l'SDK. Sul metodo CreateDocumentQuery possiamo specificare tra le opzioni di eseguire le query in parallelo su più partizioni, come mostrato nell'esempio.
Uri uri = UriFactory.CreateDocumentCollectionUri("mydb", "products") // Personalizzo le opzioni var options = new FeedOptions { EnableCrossPartitionQuery = true, MaxDegreeOfParallelism = 10, MaxBufferedItemCount = 100 }; Product[] products = client.CreateDocumentQuery<Product>(uri, options) .Where(m => m.Price > 10) .OrderBy(m => m.Id) .ToArray()
Con MaxDegreeOfParallelism controlliamo quante connessioni contemporanee effettuare, riuscendo ad eseguire più query, mentre con MaxBufferedItemCount controlliamo quanti elementi riuscire a mettere in memoria, favorendo poi l'algoritmo che mette in ordine gli elementi ottenuti da ogni collezione. Chiaramente occorre trovare dei valori che non siano eccessivi dal punto di vista della rete e della ram allocata. Possiamo in alternativa lasciare i valori predefiniti e lasciare all'SDK la gestione.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Simulare Azure Cosmos DB in locale con Docker
Centralizzare gli endpoint AI Foundry con Azure API Management
Loggare le query più lente con Entity Framework
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Utilizzare Containers in .NET Aspire
Escludere alcuni file da GitHub Secret Scanning
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Path addizionali per gli asset in ASP.NET Core MVC
Utilizzare l nesting nativo dei CSS
Utilizzare WebJobs su Linux con Azure App Service
Applicare un filtro per recuperare alcune issue di GitHub
I più letti di oggi
- Sfruttare i nuovi overload di TimeSpan.From* per creare timespan usando numeri interi
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!