Consigli per l'ottimizzazione delle prestazioni dei dati

Si applica a questa raccomandazione per l'efficienza delle prestazioni di Azure Well-Architected Framework:

PE:08 Ottimizzare le prestazioni dei dati. Ottimizzare archivi dati, partizioni e indici per l'uso previsto e effettivo nel carico di lavoro.

Questa guida descrive le raccomandazioni per ottimizzare le prestazioni dei dati. L'ottimizzazione delle prestazioni dei dati consiste nel perfezionare l'efficienza con cui il carico di lavoro elabora e archivia i dati. Ogni operazione, transazione o calcolo del carico di lavoro si basa in genere sul recupero, l'elaborazione e l'archiviazione rapidi e accurati dei dati. Quando le prestazioni dei dati sono ottimizzate, il carico di lavoro viene eseguito senza problemi. Le prestazioni dei dati compromesse creano un effetto domino di scarsa efficienza delle prestazioni. Se non si ottimizzano le prestazioni dei dati, si ottengono ritardi di risposta, latenza aumentata e scalabilità ridotta. Mette a repentaglio l'efficienza dell'intero carico di lavoro.

Definizioni

Termine Definizione
Teorema CAP Framework usato per considerare coerenza, disponibilità e tolleranza di partizione per spiegare i compromessi nella coerenza dei dati.
Ricompilazione dell'indice del database Attività di manutenzione che elimina e ricrea un indice.
Riorganizzazione degli indici di database Attività di manutenzione che ottimizza l'indice del database corrente.
Archivio dati Risorsa che archivia dati, ad esempio un database, un archivio oggetti o una condivisione file.
Coerenza finale Un modello di sincronizzazione dei dati che consente l'incoerenza temporanea nelle repliche di dati prima della sincronizzazione finale.
Indice Struttura di database che fornisce accesso rapido agli elementi.
OLAP (Online Analytical Processing) Una tecnologia che organizza database aziendali di grandi dimensioni, supporta l'analisi complessa ed esegue query analitiche complesse senza influire negativamente sui sistemi transazionali.
OLTP (Online Transaction Processing) Tecnologia che registra le interazioni aziendali man mano che si verificano nelle operazioni quotidiane di un'organizzazione.
Concorrenza ottimistica Approccio per l'aggiornamento dei database che usano snapshot per eseguire aggiornamenti invece dei tradizionali meccanismi di blocco, migliorando le prestazioni e la scalabilità.
Teorema PACELC Framework usato per considerare la tolleranza di partizione, la disponibilità, la coerenza e la latenza per spiegare i compromessi nella coerenza dei dati.
Partizionamento Processo di suddivisione fisica dei dati in archivi dati separati.
Ottimizzazione delle query Processo che ottimizza la velocità di una query di database.
Replica in lettura Copia dinamica di un database primario che consente di eseguire l'offload del traffico di lettura da un database di scrittura.

Strategie di progettazione chiave

Per ottimizzare l'utilizzo dei dati, assicurarsi che gli archivi dati, le partizioni e gli indici siano ottimizzati per l'uso previsto e per l'uso effettivo in un carico di lavoro. L'utilizzo ottimizzato dei dati può migliorare le prestazioni delle query, ridurre l'utilizzo delle risorse e migliorare l'efficienza complessiva del sistema. Considerare le strategie seguenti:

  • Dati del profilo. Comprendere i dati e assicurarsi che il modello di dati sia particolarmente adatto per il carico di lavoro. Prendere in considerazione fattori come la normalizzazione dei dati, le strategie di indicizzazione e le tecniche di partizionamento. Per un recupero efficiente dei dati, assicurarsi di selezionare i tipi di dati appropriati, definire le relazioni tra le entità e determinare una strategia di indicizzazione ottimale.

  • Ottimizzare la configurazione dell'archiviazione dei dati. Configurare l'infrastruttura di archiviazione dei dati per allinearsi ai requisiti del carico di lavoro. Selezionare una tecnologia di archiviazione appropriata, ad esempio database relazionali, database NoSQL e data warehouse. Ottimizzare le impostazioni di archiviazione, ad esempio le dimensioni del buffer, i meccanismi di memorizzazione nella cache e la compressione.

  • Ottimizzare le prestazioni di query. Analizzare e ottimizzare le query eseguite nel carico di lavoro. Usare tecniche come l'ottimizzazione delle query, l'indicizzazione e la memorizzazione nella cache. Per identificare i colli di bottiglia, usare i piani di query e gli strumenti di monitoraggio delle prestazioni e quindi apportare miglioramenti necessari.

  • Monitorare e ottimizzare regolarmente il sistema. Monitorare continuamente le prestazioni del carico di lavoro e scorrere la configurazione dell'archiviazione dei dati e le ottimizzazioni delle query. In base alle procedure consigliate per l'ottimizzazione delle prestazioni, analizzare le metriche di sistema, identificare le aree di miglioramento e implementare le modifiche.

Dati del profilo

La profilatura dei dati implica l'analisi dei dati da un'origine e la raccolta di informazioni su di esso. L'obiettivo è comprendere la qualità, la struttura e le caratteristiche dei dati del carico di lavoro. Questo processo consente l'identificazione di problemi quali valori mancanti, duplicati, formati incoerenti e altre anomalie. Per una profilatura efficace dei dati, considerare le strategie seguenti:

  • Comprendere la struttura dei dati. Esaminare la struttura dei dati, incluse tabelle, colonne e relazioni. Determinare i tipi di dati, le lunghezze e i vincoli applicati a ogni colonna. La valutazione della struttura dei dati consente di comprendere come sono organizzati i dati e come sono correlati ad altri elementi dati.

  • Analizzare il volume dei dati. Valutare il volume dei dati per comprendere le dimensioni complessive e i modelli di crescita. Determinare il numero di record o documenti e le dimensioni di singole tabelle o raccolte. Queste informazioni consentono di stimare i requisiti di archiviazione e identificare i problemi di scalabilità.

  • Identificare le relazioni tra i dati. Esplorare le relazioni tra elementi di dati, ad esempio relazioni tra chiavi primarie ed esterne. Comprendere in che modo i dati sono connessi, in modo da determinare il modo in cui le modifiche in una tabella o in un documento potrebbero influire sui dati correlati.

  • Valutare la qualità dei dati. Valutare la qualità dei dati esaminando fattori quali completezza, accuratezza, coerenza e univocità. Identificare le anomalie dei dati, i valori mancanti o i record duplicati che potrebbero influire sull'integrità dei dati e sulle prestazioni delle query. Questo passaggio consente di identificare le aree per la pulizia e il miglioramento dei dati.

  • Acquisire la distribuzione dei dati. Analizzare la distribuzione dei valori all'interno di ogni colonna per determinare i modelli di dati. Identificare valori frequenti e rari, outlier e sfasamenti dei dati. Per ottimizzare le prestazioni delle query, scegliere le strategie di indicizzazione appropriate e le tecniche di ottimizzazione delle query in base alla distribuzione.

Monitorare le prestazioni dei dati

Il monitoraggio delle prestazioni dei dati è la pratica di tenere traccia coerente dell'efficienza degli archivi dati, delle partizioni e degli indici in tempo reale. Implica la raccolta e l'analisi delle metriche delle prestazioni specifiche per le operazioni sui dati, usando strumenti personalizzati per soluzioni di monitoraggio specifiche del sistema, specifiche del database o di terze parti. Un monitoraggio efficace delle prestazioni dei dati consente di identificare e mitigare in modo proattivo potenziali colli di bottiglia, assicurandosi che i processi e le attività correlati ai dati siano efficienti. Per monitorare le prestazioni dei dati, considerare le strategie seguenti:

  • Raccogliere metriche specifiche dei dati. Raccogliere le metriche chiave direttamente correlate alle prestazioni dei dati. Queste metriche includono tempi di risposta delle query, velocità effettiva dei dati, operazioni di I/O su disco correlate all'accesso ai dati e tempi di caricamento di partizioni di dati specifiche.

  • Configurare gli avvisi dati. Configurare gli avvisi in modo specifico per le metriche dei dati. Usare soglie o anomalie predefinite in queste metriche per attivare gli avvisi. Gli avvisi consentono di ricevere notifiche quando le metriche delle prestazioni superano gli intervalli accettabili o mostrano un comportamento anomalo. Ad esempio, se una query di database richiede più tempo del previsto o se la velocità effettiva dei dati diminuisce in modo significativo, viene attivato un avviso. È possibile configurare questi avvisi usando strumenti di monitoraggio specializzati o script personalizzati.

  • Diagnosticare i problemi di prestazioni dei dati. Esaminare regolarmente le metriche dei dati raccolte per individuare potenziali colli di bottiglia delle prestazioni o riduzione delle prestazioni nelle operazioni sui dati. Gli strumenti di visualizzazione o i dashboard possono essere preziosi in questo processo, consentendo di evidenziare tendenze, colli di bottiglia e outlier nelle prestazioni dei dati. Una volta identificato, esaminare le cause radice di questi problemi e strategizzare i passaggi di correzione appropriati.

Dati di partizione

Il partizionamento comporta la divisione di set di dati di grandi dimensioni o carichi di lavoro con volumi elevati in subset più piccoli e gestibili. Il partizionamento migliora l'efficienza delle prestazioni dei dati distribuendo il carico di lavoro e migliorando l'elaborazione parallela. Garantisce anche un accesso ai dati più efficace in base a esigenze specifiche e modelli di query. È possibile partizionare i dati verticalmente o orizzontalmente (detti anche partizionamento orizzontale).

Strategia Definizione Esempio Casi d'uso
Il partizionamento verticale Dividere una tabella in tabelle più piccole selezionando colonne o campi specifici per ogni partizione. Ogni partizione rappresenta un subset dei dati completi. Se si dispone di una tabella con colonne A, B, C e D, è possibile creare una tabella con colonne A e B e un'altra con colonne C e D. - Una tabella contiene molte colonne, ma le query non accedono a tutte le colonne insieme.
- Alcune colonne sono più grandi di altre e separarle possono migliorare le prestazioni di I/O.
- Le parti dei dati diverse hanno modelli di accesso diversi.
Partizionamento orizzontale Suddividere i dati in base a righe o intervalli di valori ,noti anche come partizionamento orizzontale. Ogni partizione contiene un subset di righe con caratteristiche simili. Se si dispone di una tabella con righe da 1 a 1000, è possibile creare una partizione con righe da 1 a 500 e un'altra con righe da 501 a 1000. - Un set di dati è troppo grande per un singolo percorso o server.
- È possibile accedere ai dati in base a intervalli o filtri specifici.
- È necessario distribuire il carico di lavoro tra nodi fisici o server per migliorare le prestazioni.

Per partizionare i dati, prendere in considerazione i passaggi seguenti:

  • Analizzare dati e query. Analizzare i modelli di dati e di query per identificare strategie di partizionamento o partizionamento orizzontale appropriate. Comprendere la natura dei dati, dei modelli di accesso e dei requisiti di distribuzione.

  • Determinare una chiave. Scegliere una chiave di partizionamento o partizionamento orizzontale per distribuire i dati tra partizioni o partizioni. Selezionare attentamente la chiave in base alle caratteristiche dei dati e ai requisiti di query.

  • Determinare la logica. Determinare una logica di partizionamento o partizionamento orizzontale in base alla chiave scelta. È consigliabile dividere i dati in intervalli, applicare algoritmi hash o usare altre tecniche di partizionamento.

  • Configurare l'infrastruttura. Configurare il sistema di database per supportare il partizionamento o il partizionamento orizzontale. Prendere in considerazione la creazione dell'infrastruttura necessaria, la definizione delle partizioni o delle partizioni e la configurazione della distribuzione dei dati.

Per altre informazioni, vedere le indicazioni sul partizionamento dei dati.

Ottimizzare le query di database

L'ottimizzazione delle query di database ottimizza le query usando tecniche quali hint per l'indice e memorizzazione nella cache. Queste regolazioni aumentano l'efficienza e la velocità di recupero dei dati. Di conseguenza, il database ha un carico di lavoro più leggero, le risorse funzionano in modo più efficace e gli utenti godono di interazioni più fluide. Per ottimizzare le query di database, prendere in considerazione le strategie seguenti:

  • Riscrivere le query. Esaminare e analizzare query complesse per identificare le opportunità di riscriverle. Prendere in considerazione la ristrutturazione della logica di query, l'eliminazione di operazioni ridondanti o la semplificazione della sintassi delle query.

  • Evitare il problema di query N+1. Ridurre al minimo il numero di round trip nel database usando join e recupero batch per recuperare i dati correlati in modo efficiente.

  • Riordinare i join. Valutare il piano di query e valutare la possibilità di ridisporre l'ordine di join per ridurre al minimo il numero di righe in ogni operazione di join. L'ordine in cui si unisce le tabelle può influire sulle prestazioni delle query.

  • Usare hint per l'indice. Usare hint di indice in modo che un motore di database possa specificare l'uso degli indici durante l'esecuzione di una query. Gli hint di indice guidano l'utilità di ottimizzazione per selezionare gli indici più appropriati.

  • Memorizzare nella cache le query. Archiviare i risultati delle query eseguite di frequente in memoria. La memorizzazione nella cache delle query elimina la necessità di eseguire ripetutamente la stessa query e riduce il sovraccarico di elaborazione delle query.

  • Ottimizzare il blocco. Evitare hint di blocco non necessari o restrittivi nelle query. Strategie di blocco efficienti possono migliorare le prestazioni e la concorrenza delle query. Applicare meccanismi di blocco ottimizzati forniti dal sistema di database. Analizzare e regolare i livelli di isolamento per bilanciare la coerenza dei dati e le prestazioni delle query.

  • Monitorare e ottimizzare. Monitorare le metriche delle prestazioni delle query, ad esempio runtime, utilizzo delle risorse e velocità effettiva delle query. Usare gli strumenti di profilatura del database e le funzionalità di monitoraggio per identificare query con prestazioni scarse. Valutare e ottimizzare i piani di query in base ai dati sulle prestazioni raccolti. Analizzare i piani di query e le statistiche di attesa per identificare i colli di bottiglia. Usare queste informazioni per ottimizzare le prestazioni delle query.

Ottimizzare le prestazioni degli indici

Gli indici migliorano la velocità di recupero dei dati consentendo ai database di trovare rapidamente i dati usando colonne o campi specifici. Quando si ottimizzano questi indici, le operazioni di ordinamento e join diventano più efficienti, causando query più veloci. Indici ben ottimizzati per ridurre le operazioni di I/O su disco necessarie per le query. La rimozione di indici non necessario o ridondanti libera spazio di archiviazione prezioso. Per ottimizzare le prestazioni dell'indice, considerare le strategie seguenti:

  • Analizzare i modelli di query. Comprendere i modelli di query eseguiti nel database. Identificare le query eseguite di frequente e che potrebbero compromettere le prestazioni. Analizzare i modelli di query per determinare quali indici sono utili per ottimizzare le prestazioni.

  • Valutare gli indici esistenti. Esaminare gli indici esistenti nel database. Valutare l'utilizzo, gli effetti sulle prestazioni e la pertinenza per i modelli di query. Identificare gli indici ridondanti o inutilizzati che è possibile rimuovere per migliorare le prestazioni di scrittura e ridurre il sovraccarico di archiviazione.

  • Identificare le colonne per l'indicizzazione. Identificare le colonne usate di frequente nelle clausole where, join e order by delle query. Queste colonne sono potenziali candidati per l'indicizzazione perché possono abilitare il recupero rapido dei dati.

  • Scegliere un tipo di indice appropriato. Selezionare un tipo di indice appropriato in base al sistema di database. Le opzioni comuni includono gli indici albero B per le query di uguaglianza e di intervallo, gli indici hash per le query di corrispondenza esatta e gli indici full-text per le operazioni di ricerca di testo. Scegliere un tipo di indice più adatto ai requisiti di query.

  • Prendere in considerazione l'ordine delle colonne dell'indice. Quando si creano indici compositi o indici con più colonne, prendere in considerazione l'ordine delle colonne. Posizionare le colonne usate più di frequente nelle query all'inizio dell'indice. L'ordine delle colonne consente di garantire che il carico di lavoro usi in modo efficace gli indici per un'ampia gamma di query.

  • Bilanciare le dimensioni dell'indice. Evitare di creare indici in colonne con cardinalità bassa o colonne con un numero ridotto di valori distinti. Tali indici possono essere inefficienti e aumentare le dimensioni del database. Al contrario, le colonne di indice con una selettività elevata.

  • Mantenere l'utilizzo dell'indice. Monitorare continuamente l'utilizzo e le prestazioni degli indici. Cercare opportunità di creare nuovi indici o modificare gli indici esistenti in base alle modifiche apportate ai modelli di query o ai requisiti di prestazioni. Rimuovere o aggiornare gli indici che non sono più utili. Gli indici hanno un sovraccarico di manutenzione. Quando i dati cambiano, gli indici possono frammentarsi e influire sulle prestazioni. Eseguire regolarmente attività di manutenzione dell'indice, ad esempio ricompilare o riorganizzare gli indici, per garantire prestazioni ottimali.

  • Testare e convalidare. Prima di rivedere gli indici in un ambiente di produzione, eseguire test e convalida accurati. Misurare l'effetto delle prestazioni delle revisioni degli indici usando carichi di lavoro rappresentativi. Verificare i miglioramenti rispetto ai benchmark predefiniti.

Compromesso: gli indici ad albero B potrebbero avere un sovraccarico elevato di archiviazione e le query di corrispondenza esatta potrebbero essere lente. Gli indici hash non sono adatti per query di intervallo o operatori di confronto. Gli indici full-text potrebbero avere requisiti di archiviazione elevati e le query di dati non testuali potrebbero essere lente.

Prendere in considerazione la compressione dei dati

La compressione dei dati è il processo di riduzione delle dimensioni dei dati per ottimizzare lo spazio di archiviazione e migliorare l'efficienza delle prestazioni del carico di lavoro. I dati compressi richiedono meno spazio di archiviazione e meno larghezza di banda per la trasmissione, che comporta il trasferimento rapido dei dati. È possibile comprimere i dati per ridurre il footprint di archiviazione e migliorare i tempi di accesso ai dati. Quando si comprimono i dati, riduce le operazioni di I/O e i requisiti di larghezza di banda di rete.

La compressione senza perdita e la compressione della perdita sono algoritmi di compressione dei dati. Gli algoritmi di compressione senza perdita riducono le dimensioni dei dati senza perdere informazioni. Gli algoritmi di compressione di perdita ottengono rapporti di compressione elevati rimuovendo informazioni meno importanti o ridondanti.

Compromesso: per comprimere e decomprimere i dati, sono necessarie risorse di calcolo, ad esempio CPU e memoria. Più dati compressi, più risorse sono necessarie.

Archiviare ed eliminare i dati

L'archiviazione e l'eliminazione sono strategie che semplificano l'archiviazione dei dati. L'archiviazione sposta i dati meno recenti e meno frequentemente accessibili a un'archiviazione più conveniente. L'eliminazione dei dati rimuove definitivamente i dati ridondanti. Contribuiscono all'efficienza delle prestazioni riducendo il volume di dati, aumentando la velocità di accesso ai dati e riducendo i tempi di backup e ripristino:

  • Riduzione del volume di dati: meno dati significa tempi di elaborazione più rapidi, garantendo risposte rapide alle richieste utente.

  • Aumento della velocità di accesso ai dati: un set di dati ridotto consente query più rapide e recupero dei dati, ottimizzando la velocità di risposta del sistema.

  • Riduzione dei tempi di backup e ripristino: i set di dati più piccoli accelerano i processi di backup e ripristino, riducendo al minimo i tempi di inattività e garantendo prestazioni coerenti.

L'archiviazione e l'eliminazione sono fondamentali per mantenere un'efficienza di prestazioni massima nei sistemi basati sui dati.

Ottimizzare il carico di archiviazione

L'ottimizzazione del carico di archiviazione significa semplificare le richieste al sistema di archiviazione. Consente di eliminare le richieste non necessarie. Migliora anche il recupero dei dati e impedisce di sovraccaricare l'archiviazione. L'ottimizzazione del carico di archiviazione garantisce che il sistema di archiviazione rimanga reattivo alle richieste legittime e mantenga prestazioni ottimali. Implementare strategie per ridurre il carico di elaborazione nell'archivio dati. Per ottimizzare il carico dell'archivio dati, prendere in considerazione le strategie seguenti:

Usare la memorizzazione nella cache

La memorizzazione nella cache archivia i dati di accesso comune in un'area di archiviazione ad accesso rapido, rendendo più rapido il recupero dei dati rispetto al pull dall'origine principale. Questa tecnica aumenta le prestazioni dei dati riducendo i tempi di accesso ed evitando recupero di dati ripetitivi. La memorizzazione nella cache migliora le velocità di lettura e i tempi di risposta dell'utente, soprattutto per i dati a cui si accede di frequente, questo metodo è più efficace sui dati statici o sui dati che raramente cambiano.

Per garantire un'efficienza ottimale della memorizzazione nella cache, prendere in considerazione fattori come i criteri di scadenza, le strategie di rimozione e la gestione delle dimensioni della cache. Modificare le impostazioni, ad esempio il tempo di vita (TTL), per prestazioni ottimali. Per usare una cache per ottimizzare il carico di archiviazione, prendere in considerazione le strategie seguenti:

  • Memorizzazione nella cache in memoria: eseguire la memorizzazione nella cache in memoria per archiviare i dati con accesso frequente in memoria per il recupero rapido. È possibile usare questa tecnica per i dati dell'applicazione costosi da calcolare o recuperare da un database. La memorizzazione nella cache in memoria è utile per i dati letti di frequente, ma non cambiano di frequente.

  • Memorizzazione nella cache delle query di database: usare questa tecnica per memorizzare nella cache i risultati delle query di database per evitare di eseguire la stessa query più volte. La memorizzazione nella cache delle query di database è utile per le query di database complesse e in termini di tempo. Quando si memorizzano nella cache i risultati di una query, le richieste successive per la stessa query vengono restituite rapidamente.

  • Memorizzazione nella cache della rete per la distribuzione del contenuto: usare questa tecnica per memorizzare nella cache il contenuto Web nei server di rete distribuiti per ridurre la latenza e migliorare la distribuzione dei contenuti. La memorizzazione nella cache della rete per la distribuzione del contenuto è efficace per il contenuto statico, ad esempio immagini, file CSS e file JavaScript. Le reti di distribuzione del contenuto archiviano copie di contenuto in più posizioni in tutto il mondo, in modo che gli utenti possano accedere al contenuto da un server vicino a loro geograficamente.

Usare repliche di lettura

Molti database supportano più repliche di lettura. Distribuire query di lettura tra repliche per ridurre al minimo la richiesta nel database di scrittura. Ogni replica di lettura può servire un subset di traffico, che può migliorare le prestazioni.

Quando si dispone di un carico di lavoro con più repliche di dati che si prevede di rimanere sincronizzate, è utile modellare questo sistema distribuito usando il teorema PACELC. Il teorema PACELC consente di comprendere la latenza rispetto alle scelte di compromesso della concorrenza nello stato non partizionato del sistema. Usare queste informazioni per scegliere una strategia di sincronizzazione dei dati e un motore di database che indirizza meglio il sistema in uno stato partizionato e non partizionato. Per altre informazioni, vedere Pattern command and Query Responsibility Segregation (CQRS).

Ottimizzare la coerenza dei dati

In un carico di lavoro distribuito, in cui i dati si trovano in più nodi o posizioni, il livello di coerenza selezionato determina la velocità di modifica in una posizione in cui i dati si riflettono in altri. Optando per una coerenza più rigorosa usa più risorse di calcolo e può influire negativamente sull'efficienza delle prestazioni. D'altra parte, un livello di coerenza meno rigoroso, come la coerenza finale introduce inconsistenze temporanee tra i nodi, ma può migliorare l'efficienza delle prestazioni.

La coerenza finale colpisce un equilibrio tra accuratezza dei dati e prestazioni del carico di lavoro. Le modifiche vengono distribuite gradualmente anziché immediatamente, aumentando la velocità di risposta del carico di lavoro e la velocità di elaborazione dei dati. Anche se introduce inconsistenze di breve durata, il carico di lavoro presenta infine dati coerenti in tutti i nodi. La scelta della coerenza finale può elevare le prestazioni di un carico di lavoro e migliorare ulteriormente la disponibilità e la scalabilità.

Ottimizzare gli aggiornamenti dei dati

È possibile usare la concorrenza ottimistica per gestire gli aggiornamenti simultanei agli stessi dati. Anziché bloccare i dati e impedire altri aggiornamenti, la concorrenza ottimistica consente a più utenti o processi di lavorare simultaneamente e presuppone che i conflitti siano rari.

Con concorrenza ottimistica, ogni operazione di aggiornamento include una versione o un timestamp che rappresenta lo stato dei dati al momento dell'aggiornamento. Quando viene rilevato un aggiornamento in conflitto, il sistema risolve il conflitto rifiutando l'aggiornamento o l'unione delle modifiche.

La concorrenza ottimistica riduce al minimo la contesa e consente agli aggiornamenti simultanei di procedere senza blocchi non necessari. Riduce il tempo di attesa per le risorse e offre una velocità effettiva elevata.

Ottimizzare lo spostamento e l'elaborazione dei dati

L'ottimizzazione dello spostamento e dell'elaborazione dei dati comporta un miglioramento dell'efficienza e delle prestazioni delle operazioni correlate all'estrazione, alla trasformazione, al caricamento e all'elaborazione dei dati. Considerare gli aspetti principali seguenti dell'ottimizzazione dello spostamento e dell'elaborazione dei dati:

  • Estrazione, trasformazione e ottimizzazione del carico (ETL): ottimizzare i processi ETL per ridurre al minimo il tempo di elaborazione. È possibile semplificare il processo di estrazione, implementare algoritmi di trasformazione efficienti e ottimizzare il processo di caricamento. Quando si rende efficiente ogni passaggio, è possibile ottimizzare il flusso di lavoro complessivo.

  • Elaborazione parallela: usare tecniche di elaborazione parallele per migliorare le prestazioni. Quando si distribuiscono attività di elaborazione dei dati in più thread o nodi, è possibile dividere ed elaborare il carico di lavoro simultaneamente, che comporta un'elaborazione rapida.

  • Elaborazione batch: raggruppare attività simili per ridurre il sovraccarico causato da operazioni ripetute. Elaborare più attività in un batch per ridurre il tempo di elaborazione complessivo.

Ottimizzare la progettazione dell'archiviazione

L'ottimizzazione della progettazione dell'archiviazione comporta la creazione di un'architettura di archiviazione dei dati precisa e la selezione di tecnologie di archiviazione appropriate. Una progettazione di archiviazione semplificata migliora l'accesso ai dati, il recupero e la manipolazione. Attraverso la progettazione strategica dell'archiviazione, un carico di lavoro ottiene tempi di risposta migliorati e funzionalità complessive.

Progettare la prossimità dei dati

La prossimità dei dati si riferisce al posizionamento strategico dei dati più vicino agli utenti o ai servizi che lo accedono più di frequente. Riducendo la distanza fisica o logica tra i dati e i relativi utenti, la prossimità dei dati garantisce una maggiore velocità di accesso ai dati e una maggiore velocità di risposta. Per ottimizzare la progettazione per la prossimità vicina, prendere in considerazione queste strategie:

  • Valutare i modelli di accesso ai dati: valutare i modelli di accesso del carico di lavoro e i dati a cui si accede di frequente. Questa analisi può aiutare a determinare dove inserire i dati per il massimo vantaggio.

  • Scegliere soluzioni che supportano la rilocazione dei dati: prendere in considerazione soluzioni che offrono la rilocazione dinamica dei dati in base ai modelli di accesso modificati, garantendo una posizione ottimale dei dati.

  • Scegliere soluzioni che supportano la sincronizzazione dei dati: se si prevede di soddisfare una base utente distribuita, scegliere soluzioni che facilitano la sincronizzazione dei dati in varie aree, assicurandosi che le repliche dati siano disponibili in prossimità degli utenti.

Compromesso: se i dati sottostanti cambiano di frequente, implementare un meccanismo di invalidazione della cache per garantire che i dati memorizzati nella cache rimangano aggiornati.

Usare la persistenza poliglot

La persistenza poliglot è la pratica di usare più tecnologie di archiviazione dati per archiviare e gestire diversi tipi di dati all'interno di un'applicazione o di un sistema. Diversi tipi di database o soluzioni di archiviazione servono requisiti di dati diversi.

La persistenza poliglot sfrutta i vantaggi di ogni tecnologia di archiviazione dati per garantire prestazioni e scalabilità ottimali per ogni tipo di dati. Ad esempio, è possibile usare un database relazionale per archiviare dati transazionali strutturati e transazionali. È inoltre possibile usare un database NoSQL per archiviare dati non strutturati o semistrutturati.

Progettare uno schema per ogni tecnologia di archiviazione dati in base ai requisiti dei dati. Per i database relazionali, è possibile creare tabelle normalizzate con relazioni appropriate. Per i database NoSQL, è possibile definire strutture di documento o coppie chiave-valore. Sviluppare i componenti necessari per interagire con ogni tecnologia di archiviazione dati, ad esempio API, livelli di accesso ai dati o pipeline di integrazione dei dati. Assicurarsi che l'applicazione possa leggere e scrivere dati negli archivi dati appropriati.

Compromesso: una struttura di dati con bassa normalizzazione può migliorare le prestazioni ma introdurre complessità.

Separare i sistemi OLTP e OLAP

Per separare i sistemi OLTP e OLAP , progettare e distribuire sistemi distinti per l'elaborazione transazionale e le attività di elaborazione analitica. Questa separazione consente di ottimizzare ogni sistema per il carico di lavoro e le caratteristiche specifiche.

I sistemi OLTP vengono usati per l'elaborazione transazionale in tempo reale. Gestiscono in modo efficiente e affidabile singole transazioni. I sistemi OLTP vengono in genere usati per eseguire attività operative quotidiane, ad esempio l'elaborazione degli ordini online, la gestione dell'inventario e la gestione dei dati dei clienti. I sistemi OLTP assegnano priorità alla velocità di risposta, coerenza e concorrenza.

I sistemi OLAP vengono usati per l'elaborazione analitica e la creazione di report complessi. Gestiscono grandi volumi di dati ed eseguono calcoli e aggregazioni intensivi. I sistemi OLAP vengono usati per attività quali business intelligence, data mining e supporto decisionale. I sistemi OLAP assegnano priorità alle prestazioni delle query, all'aggregazione dei dati e all'analisi multidimensionale.

Quando si separano sistemi OLTP e OLAP, è possibile allocare risorse appropriate e ottimizzare ogni sistema per il carico di lavoro specifico. La separazione consente di applicare tecniche di modellazione dei dati diverse a ogni sistema. I sistemi OLTP usano in genere schemi normalizzati per l'elaborazione transazionale efficiente. I sistemi OLAP possono usare schemi denormalizzati o tecniche di data warehousing per ottimizzare le prestazioni delle query.

Facilitazione di Azure

Dati di profilatura: Azure offre strumenti e servizi che è possibile usare per profilare i dati, ad esempio Azure Data Catalog, Azure Purview e Azure Synapse Analytics. Questi strumenti consentono di estrarre, trasformare e caricare dati da diverse origini, eseguire controlli di qualità dei dati e ottenere informazioni dettagliate sui dati.

Monitoraggio delle prestazioni dei dati: per monitorare le prestazioni dei dati, è possibile usare Monitoraggio di Azure per raccogliere e analizzare le metriche dell'infrastruttura, i log e i dati dell'applicazione. È possibile integrare Monitor con altri servizi come Application Insights. Application Insights offre il monitoraggio delle prestazioni dell'applicazione e supporta molte piattaforme.

Application Insights raccoglie i dati sull'utilizzo e sulle prestazioni. È possibile usare Log Analytics per correlare i dati con i dati di configurazione e prestazioni nelle risorse di Azure.

È possibile usare la funzionalità insights di Azure SQL e Azure Cosmos DB per monitorare il database. Questa funzionalità consente di diagnosticare e ottimizzare i problemi di prestazioni del database.

Partizionamento dei dati: Azure offre varie strategie di partizionamento per archivi dati diversi. Ogni archivio dati potrebbe avere considerazioni e opzioni di configurazione diverse per il partizionamento dei dati. Per altre informazioni, vedere Strategie di partizionamento dei dati.

Ottimizzazione delle query e delle prestazioni dell'indice del database: usare la funzionalità informazioni dettagliate sulle prestazioni delle query di Azure SQL Database per ottimizzare query, tabelle e database. È possibile usare questa funzionalità per identificare e risolvere i problemi di prestazioni delle query.

Per i database relazionali, è necessario seguire le linee guida per la progettazione degli indici, SQL Server linee guida per l'indice e le indicazioni sull'indice di Azure Cosmos DB. Usare database SQL per eseguire l'ottimizzazione automatica per le query per migliorare le prestazioni.

Nei database SQL è necessario riorganizzare o ricompilare regolarmente gli indici. Identificare le query lente e ottimizzarle per migliorare le prestazioni. Molti motori di database dispongono di funzionalità di ottimizzazione delle query. Per altre informazioni, vedere Procedure consigliate per le prestazioni delle query.

Azure Cosmos DB ha un criterio di indicizzazione predefinito che indicizza ogni proprietà di ogni elemento e applica gli indici di intervallo per qualsiasi stringa o numero. Questo criterio offre prestazioni di query efficienti e non è necessario gestire gli indici in anticipo.

Ottimizzazione del carico di archiviazione: molti servizi di database di Azure supportano repliche in lettura. La disponibilità e la configurazione delle repliche di lettura variano a seconda del servizio di database di Azure. Fare riferimento alla documentazione ufficiale per ogni servizio per comprendere i dettagli e le opzioni.

Ottimizzazione della progettazione dell'archiviazione: Azure offre molti archivi dati diversi per soddisfare le esigenze del carico di lavoro. Informazioni sui tipi di archivio dati e selezionare un archivio dati di Azure per l'applicazione.

Elenco di controllo dell'efficienza delle prestazioni

Fare riferimento al set completo di raccomandazioni.