Passa al contenuto principale

Cos'è un database transazionale?

I database transazionali gestiscono operazioni in tempo reale con conformità ACID, archiviazione basata su righe e controllo della concorrenza integrato

di Team Databricks

  • I database transazionali gestiscono operazioni di lettura/scrittura in tempo reale ad alto volume utilizzando la conformità ACID per garantire che ogni aggiornamento sia accurato, coerente e permanente.
  • Sono ottimizzati per carichi di lavoro operativi come quelli bancari, e-commerce e sanitari, ma non sono adatti per analisi su larga scala, join complessi o scalabilità orizzontale.
  • "Relazionali" e "transazionali" descrivono cose diverse: struttura dei dati vs. ottimizzazione del carico di lavoro. Molti database relazionali e NoSQL supportano entrambi le transazioni ACID.

Un database transazionale è un database progettato per gestire grandi volumi di operazioni brevi e in tempo reale che leggono e scrivono dati. Queste operazioni rappresentano interazioni piccole ma critiche che alimentano l'attività aziendale quotidiana, come l'elaborazione degli ordini dei clienti, l'aggiornamento del saldo di un conto, l'invio di un pagamento o la modifica di un record cliente. Poiché ogni interazione modifica lo stato del sistema, i database transazionali sono costruiti per garantire che ogni aggiornamento sia accurato, completo e registrato in modo sicuro.

Al centro di questa affidabilità c'è la conformità ACID, un insieme di proprietà che garantisce che ogni transazione si comporti in modo prevedibile anche quando molti utenti o applicazioni accedono al database contemporaneamente. Questo rende i database transazionali il fondamento dei carichi di lavoro di elaborazione transazionale online (OLTP), dove velocità, correttezza e coerenza sono essenziali.

I database transazionali utilizzano tipicamente un modello di archiviazione orientato alle righe, che organizza i dati come record completi. Questo layout è ottimizzato per i carichi di lavoro che inseriscono, aggiornano o recuperano frequentemente singole righe, consentendo alle applicazioni di accedere ai dati esatti di cui hanno bisogno con un overhead minimo.

Insieme, queste caratteristiche rendono i database transazionali una scelta affidabile per i sistemi che devono riflettere lo stato attuale dell'azienda in qualsiasi momento. Supportano tutto, dagli acquisti al dettaglio ai sistemi bancari alle applicazioni operative che si basano su modifiche dei dati rapide, accurate e coerenti.

Come funzionano i database transazionali

Il ciclo di vita della transazione

Una transazione rappresenta una singola unità logica di lavoro che deve essere elaborata in modo affidabile dall'inizio alla fine. Anche quando una transazione contiene più passaggi, il database tratta l'intera sequenza come un'unica operazione. Il ciclo di vita include generalmente tre fasi:

  1. Inizio: L'applicazione segnala che una nuova transazione è in corso.
  2. Esecuzione delle operazioni: La transazione esegue una o più istruzioni che modificano i dati, come INSERT, UPDATE o DELETE.
  3. Commit o rollback: Se tutte le operazioni vengono completate con successo, la transazione viene confermata (commit) e le modifiche diventano permanenti. Se un passaggio fallisce, il database annulla l'intera transazione riportandola allo stato precedente.

Questo comportamento "tutto o niente" impedisce aggiornamenti parziali che potrebbero lasciare i dati incoerenti. Ad esempio, un trasferimento bancario aggiorna due conti insieme come parte di un'unica transazione. Il database garantisce che il sistema non finisca mai con solo metà del lavoro applicato.

Archiviazione basata su righe

I database transazionali utilizzano tipicamente un modello di archiviazione orientato alle righe, in cui ogni riga contiene tutti i campi per un singolo record. Questo layout è ottimizzato per i carichi di lavoro che leggono o modificano frequentemente singoli record, poiché il database può recuperare o aggiornare l'intera riga in un'unica operazione.

Questo design contrasta con l'archiviazione colonnare, che organizza i dati per colonna ed è ottimizzata per i carichi di lavoro analitici che scansionano grandi volumi di dati su pochi attributi. Mentre i sistemi colonnari eccellono nelle aggregazioni e nelle query su larga scala, sono meno efficienti per le operazioni di lettura/scrittura piccole e frequenti comuni nei sistemi transazionali.

L'archiviazione basata su righe si allinea naturalmente ai modelli OLTP. Ad esempio, le applicazioni spesso devono recuperare o aggiornare rapidamente un record completo, come un ordine, un profilo cliente o un conto. Memorizzando i dati come righe complete, i database transazionali minimizzano l'I/O e offrono prestazioni elevate per le operazioni in tempo reale.

Spiegazione delle proprietà ACID

I database transazionali si basano su quattro garanzie: atomicità, coerenza, isolamento e durabilità, collettivamente note come proprietà ACID. Queste garanzie assicurano che ogni transazione venga elaborata in modo sicuro e prevedibile, anche in caso di elevata concorrenza o guasti di sistema.

Atomicità

L'atomicità garantisce che una transazione sia trattata come un'unità di lavoro singola e indivisibile. Anche se una transazione contiene più passaggi, il database deve applicarli tutti o nessuno. Non esiste uno scenario in cui alcune modifiche abbiano successo mentre altre falliscono. Se un'operazione all'interno della transazione incontra un errore, il database annulla l'intero set di modifiche per mantenere uno stato coerente.

Ad esempio, la creazione di un ordine e l'aggiornamento dell'inventario devono avvenire insieme. Il sistema non dovrebbe mai registrare l'ordine senza ridurre anche il conteggio degli articoli.

Coerenza

La coerenza garantisce che ogni transazione sposti il database da uno stato valido a un altro. Tutte le regole, i vincoli e i requisiti di integrità dei dati devono essere soddisfatti prima che una transazione possa essere confermata (commit). Se una transazione viola un vincolo, come l'inserimento di una chiave primaria duplicata o la violazione di una relazione di chiave esterna, il database rifiuta la transazione e annulla le modifiche.

Ciò garantisce che il database rifletta sempre dati che sono conformi alla sua struttura definita e alle regole aziendali. Nessuna transazione è autorizzata a introdurre informazioni non valide o contraddittorie.

Isolamento

L'isolamento garantisce che le transazioni concorrenti non interferiscano tra loro. Ogni transazione dovrebbe comportarsi come se stesse eseguendo da sola, anche quando molte transazioni vengono eseguite contemporaneamente. Le modifiche non confermate apportate da una transazione devono rimanere invisibili alle altre fino a quando la transazione non viene confermata (commit).

Ciò impedisce problemi come letture sporche (dirty reads), aggiornamenti persi (lost updates) o stati intermedi incoerenti. Database diversi implementano l'isolamento attraverso vari meccanismi e livelli di isolamento, ma l'idea di base rimane la stessa: l'attività concorrente non dovrebbe compromettere la correttezza.

Durabilità

La durabilità garantisce che, una volta confermata una transazione (commit), le sue modifiche siano permanenti. I dati devono persistere anche in caso di guasti di sistema, interruzioni di corrente o crash. I database ottengono la durabilità attraverso tecniche come il logging anticipato (write-ahead logging), i checkpoint e l'archiviazione ridondante. Una volta che una transazione è confermata come completata, il sistema garantisce che i suoi effetti sopravvivano a qualsiasi guasto successivo.

Controllo della concorrenza e recupero

I database transazionali devono gestire molte operazioni che avvengono contemporaneamente, proteggendo al contempo i dati da corruzione o perdita. Il controllo della concorrenza garantisce che letture e scritture simultanee non interferiscano tra loro, e i meccanismi di recupero assicurano che i dati rimangano intatti anche in caso di guasto del sistema. Insieme, ciò consente alle applicazioni ad alto traffico di operare in sicurezza in condizioni reali.

Gestione dell'accesso concorrente

Quando più utenti o processi interagiscono contemporaneamente con il database, questo non deve consentire alle loro operazioni di entrare in conflitto. I database utilizzano strategie di blocco (locking) e livelli di isolamento per coordinare l'accesso ai dati condivisi. I blocchi garantiscono che solo una transazione possa modificare un pezzo di dati alla volta, mentre i livelli di isolamento determinano quanto le modifiche non confermate siano visibili alle altre transazioni.

Senza questi controlli, possono verificarsi diversi problemi. Una lettura sporca (dirty read) si verifica quando una transazione vede dati non confermati da un'altra transazione. Un aggiornamento perso (lost update) si verifica quando due transazioni sovrascrivono le modifiche reciproche. Una lettura fantasma (phantom read) appare quando nuove righe vengono inserite o eliminate da un'altra transazione durante una query, causando variazioni inaspettate nei risultati.

In termini pratici, il controllo della concorrenza è ciò che impedisce a un checkout di e-commerce ad alto traffico di addebitare due volte un cliente o impedisce a un'app bancaria di mostrare saldi di conto incoerenti. Coordinando l'accesso ai dati condivisi, il database garantisce che ogni transazione si comporti in modo prevedibile anche sotto carico elevato.

Recupero da crash

Anche i sistemi ben progettati possono subire guasti, quindi i database transazionali includono meccanismi per ripristinare uno stato coerente dopo un crash. L'approccio più comune è il logging anticipato (WAL), in cui ogni modifica viene registrata in un log prima di essere applicata al database. Ciò garantisce che il sistema disponga sempre di una registrazione affidabile di ciò che doveva accadere.

Se si verifica un guasto, il database riproduce il log per recuperare le transazioni confermate (commit) e annulla quelle incomplete. Questo processo garantisce che il database rifletta solo modifiche valide e completamente elaborate.

La durabilità dipende dal funzionamento congiunto di questi meccanismi di recupero. Combinando WAL, log delle transazioni e un'attenta logica di riproduzione, il database garantisce che i dati confermati persistano anche attraverso interruzioni impreviste.

Database transazionale vs. Database analitico

I database transazionali e analitici sono progettati per carichi di lavoro fondamentalmente diversi. I sistemi transazionali si concentrano su aggiornamenti rapidi e affidabili di singoli record, mentre i sistemi analitici si concentrano su query su larga scala che scansionano e aggregano dati. Comprendere le differenze tra questi sistemi aiuta a chiarire perché la maggior parte delle organizzazioni ne utilizza entrambi: uno per acquisire attività in tempo reale e un altro per analizzare le tendenze nel tempo.

Database transazionali

I database transazionali supportano molte operazioni di lettura/scrittura brevi e in tempo reale. Sono ottimizzati per l'accesso a bassa latenza a singoli record, rendendoli ideali per applicazioni che devono riflettere lo stato attuale dell'azienda in qualsiasi momento. I sistemi OLTP utilizzano tipicamente archiviazione orientata alle righe, che consente al database di recuperare o aggiornare in modo efficiente un record completo.

Questi sistemi danno priorità alla velocità dei dati. Pertanto, eccellono nel catturare e applicare le modifiche nel modo più rapido e sicuro possibile. Esempi includono l'elaborazione degli ordini, gli aggiornamenti dell'inventario, le modifiche dei profili utente e le transazioni finanziarie.

Database analitici

I database analitici sono progettati per query meno numerose e più complesse che operano su grandi set di dati. Invece di concentrarsi sui singoli record, i sistemi di elaborazione analitica online (OLAP) supportano aggregazioni, analisi di tendenza e reporting storico. Utilizzano tipicamente l'archiviazione orientata alle colonne, che consente al motore di analizzare attributi specifici su milioni o addirittura miliardi di righe con un'elevata produttività.

I sistemi OLAP danno priorità al volume dei dati. Pertanto, uno dei loro vantaggi è la capacità di elaborare in modo efficiente grandi quantità di dati storici o caricati in batch. In genere alimentano dashboard, modelli di previsione, strumenti di business intelligence e carichi di lavoro analitici su larga scala.

Relazione tra sistemi OLTP e OLAP

Questi sistemi non si escludono a vicenda. Nella maggior parte delle organizzazioni, i dati transazionali vengono replicati continuamente o periodicamente nei sistemi analitici. Questa separazione consente alle applicazioni operative di rimanere veloci e reattive, mentre i carichi di lavoro analitici vengono eseguiti in modo indipendente senza influire sulle prestazioni in tempo reale.

La tabella seguente illustra le differenze interne tra i sistemi OLTP e OLAP, e perché le organizzazioni si affidano a entrambi, confrontandoli su diverse dimensioni. Ciò include i tipi di carichi di lavoro per cui ciascuno è più adatto, nonché alcune importanti differenze architetturali.

DimensioneOLTP (Transazionale)OLAP (Analitico)
Tipo di queryOperazioni di lettura/scrittura brevi e sempliciQuery analitiche complesse e di lunga durata
Freschezza dei datiIn tempo reale o quasi in tempo realeCaricati in batch o storici
Formato di archiviazioneOrientato alle righeOrientato alle colonne
Obiettivo di ottimizzazioneBassa latenza, alta concorrenzaElevata produttività, scansioni su larga scala
Uso di esempioCheckout e-commerce, transazioni bancarieDashboard, analisi di tendenza, previsioni
Report

Il playbook sull'AI agentiva per l'enterprise

Database Transazionale vs. Database Relazionale

I database relazionali e transazionali vengono spesso discussi insieme, ma descrivono aspetti diversi di un sistema. Un database relazionale è definito dal suo modello di dati: tabelle composte da righe e colonne, chiavi che impongono relazioni e uno schema strutturato che organizza come vengono archiviati i dati. Un database transazionale, al contrario, è definito da ciò per cui è ottimizzato, ovvero gestire operazioni di lettura/scrittura in tempo reale ad alto volume con solide garanzie ACID.

La differenza principale è semplice: "relazionale" descrive come sono strutturati i dati, mentre "transazionale" descrive la funzione del database. Un sistema può essere relazionale senza essere transazionale, o transazionale senza essere relazionale, o entrambi, a seconda della sua progettazione e del carico di lavoro.

Database Relazionali

I database relazionali utilizzano un modello tabellare per rappresentare i dati e le relazioni tra le entità. Questa struttura rende facile imporre vincoli, mantenere l'integrità referenziale e interrogare i dati utilizzando SQL. Sistemi come MySQL, PostgreSQL, Oracle e SQL Server sono tutti relazionali perché archiviano i dati in tabelle e si basano su uno schema per definire come sono organizzati quei dati.

La maggior parte dei database relazionali supporta anche carichi di lavoro transazionali, motivo per cui i termini vengono talvolta confusi. Ma essere relazionale non rende intrinsecamente un sistema transazionale, definisce semplicemente come sono strutturati i dati.

Database Transazionali

I database transazionali sono progettati per elaborare molte operazioni brevi e in tempo reale in modo sicuro ed efficiente. Danno priorità a letture e scritture a bassa latenza, impongono proprietà ACID e garantiscono che ogni modifica venga applicata in modo prevedibile anche in condizioni di elevata concorrenza. Sebbene molti sistemi transazionali siano relazionali, la categoria è più ampia.

Diversi database NoSQL, tra cui MongoDB, CockroachDB e ScyllaDB, supportano anche transazioni ACID. Questi sistemi potrebbero non utilizzare un modello relazionale, ma forniscono comunque le garanzie necessarie per un OLTP affidabile.

Principali vantaggi dei database transazionali

I database transazionali sono progettati per supportare le operazioni aziendali in tempo reale in modo sicuro ed efficiente. La loro architettura e le loro garanzie li rendono adatti per applicazioni che richiedono aggiornamenti coerenti e affidabili dei singoli record sotto carico pesante. I vantaggi seguenti evidenziano perché questi sistemi rimangono fondamentali per l'OLTP.

Integrità dei dati

La conformità ACID garantisce che ogni transazione venga applicata in modo completo e corretto. Ciò impedisce scritture parziali, aggiornamenti conflittuali e altre forme di corruzione dei dati. Imponendo le proprietà ACID, i database transazionali mantengono una registrazione accurata e affidabile dell'attività aziendale.

Affidabilità

Meccanismi di recupero integrati consentono ai sistemi di database di riprendersi in modo pulito da arresti anomali o errori imprevisti. Queste funzionalità, come WAL e il replay delle transazioni, garantiscono che i dati confermati vengano preservati e le operazioni incomplete vengano annullate, mantenendo il database in uno stato coerente.

Prestazioni in tempo reale

I database transazionali sono ottimizzati per tempi di risposta a livello di millisecondi sulle singole operazioni di lettura e scrittura. Ciò li rende ideali per applicazioni che devono riflettere immediatamente lo stato più recente, come l'inserimento di ordini, gli aggiornamenti degli account o le modifiche all'inventario.

Accesso concorrente

I sistemi transazionali sono anche progettati per supportare migliaia di utenti simultanei senza conflitti. I meccanismi di controllo della concorrenza coordinano l'accesso ai dati condivisi, garantendo che ogni transazione si comporti in modo prevedibile anche quando molte operazioni avvengono contemporaneamente.

Auditabilità

Log di transazione completi forniscono una cronologia completa delle modifiche. Questi log supportano i requisiti di conformità, semplificano il debug e consentono l'analisi forense quando si indagano comportamenti imprevisti o problemi di sistema.

Limitazioni comuni

I database transazionali sono ottimizzati per le operazioni in tempo reale, ma queste stesse scelte di progettazione possono introdurre limitazioni quando i carichi di lavoro si spostano verso l'analisi, join su larga scala o evoluzione rapida dello schema. Poiché questi sistemi sono costruiti per letture e scritture rapide a livello di punto, faticano con le query analitiche che scansionano o aggregano grandi set di dati. Operazioni come aggregazioni su milioni di righe o analisi storiche ampie possono sovraccaricare il motore di archiviazione e rallentare i carichi di lavoro operativi.

I loro schemi rigidi rendono anche costoso il cambiamento. Le tabelle, i vincoli e le relazioni ben definite che impongono l'integrità dei dati richiedono un'attenta pianificazione quando si aggiungono colonne, si modificano vincoli o si ridisegnano relazioni. Le migrazioni devono essere coordinate per evitare tempi di inattività o incoerenze, il che può limitare l'agilità man mano che i modelli di dati evolvono.

Problemi di prestazioni emergono anche quando le query si basano pesantemente sui join. Sebbene i database transazionali possano eseguire join, join profondi o frequenti tra più tabelle aumentano l'I/O e la contesa dei lock man mano che i set di dati crescono. Ciò rende i carichi di lavoro analitici basati su join impraticabili su larga scala, specialmente quando competono con operazioni in tempo reale.

Lo scaling introduce un'altra limitazione. La maggior parte dei motori transazionali scala verticalmente aggiungendo più CPU, memoria o archiviazione a un singolo nodo. Lo scaling orizzontale è possibile, ma è significativamente più complesso rispetto ai sistemi NoSQL progettati fin dall'inizio per l'operazione distribuita. Man mano che il traffico o la dimensione del set di dati crescono, questo vincolo architetturale diventa più restrittivo.

Anche quando le organizzazioni scaricano l'analisi su repliche di lettura, i motori transazionali raggiungono infine soffitti di prestazioni. Le repliche si basano ancora sull'archiviazione orientata alle righe e sullo stesso modello di esecuzione della primaria, il che limita la loro capacità di gestire efficientemente grandi carichi di lavoro analitici senza influire sulle prestazioni operative.

Casi d'uso ed esempi di database

Casi d'uso comuni

I database transazionali alimentano una vasta gamma di sistemi operativi in cui accuratezza, velocità e coerenza sono essenziali. Nei servizi bancari e finanziari, supportano trasferimenti, pagamenti e aggiornamenti di account in tempo reale, garantendo che ogni modifica venga registrata in modo affidabile. Le piattaforme di e-commerce dipendono da essi per l'elaborazione degli ordini, la gestione dell'inventario e i flussi di checkout, dove ogni azione deve essere riflessa immediatamente.

I sistemi sanitari utilizzano database transazionali per gestire cartelle cliniche, pianificazione appuntamenti e fatturazione, tutti elementi che richiedono integrità rigorosa e informazioni aggiornate. I sistemi di prenotazione per compagnie aeree, hotel ed eventi si basano su garanzie transazionali per prevenire doppie prenotazioni e mantenere la disponibilità accurata. I fornitori di telecomunicazioni li utilizzano per tracciare i record delle chiamate, gestire i dati degli abbonati e supportare le operazioni di fatturazione su larga scala.

Database Transazionali Popolari

Una vasta gamma di motori di database supporta carichi di lavoro transazionali. Tra i sistemi relazionali, MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server e IBM Db2 sono ampiamente utilizzati per le loro implementazioni ACID mature e il forte supporto dell'ecosistema. Diversi database NoSQL forniscono anche garanzie transazionali, tra cui MongoDB, CockroachDB, Amazon DynamoDB e ScyllaDB, offrendo flessibilità nei modelli di dati pur supportando aggiornamenti multi-operazione affidabili.

Servizi cloud gestiti come Amazon Aurora, Google Cloud SQL, Azure SQL Database e Cloud Spanner estendono queste capacità con scaling automatizzato, alta disponibilità e operazioni gestite, rendendo più facile eseguire carichi di lavoro transazionali senza mantenere l'infrastruttura sottostante. Per i team che creano applicazioni su Databricks, vedere come utilizzare Lakebase come livello dati transazionale per le app Databricks.

Scegliere il database giusto per il tuo carico di lavoro

I database transazionali rimangono essenziali per le applicazioni che richiedono aggiornamenti rapidi e affidabili dei singoli record. Le loro garanzie ACID, le prestazioni in tempo reale e la capacità di supportare un gran numero di utenti concorrenti li rendono la spina dorsale dei sistemi operativi in tutti i settori. Allo stesso tempo, i loro vincoli architetturali, in particolare per quanto riguarda i carichi di lavoro analitici, l'evoluzione dello schema e lo scaling orizzontale, evidenziano perché le organizzazioni li affiancano a sistemi progettati per l'analisi su larga scala. Comprendere la differenza tra modelli relazionali e transazionali, e i punti di forza e i limiti specifici dei motori transazionali, aiuterà i team a scegliere il database giusto per ogni carico di lavoro e a costruire architetture che bilancino integrità, prestazioni e scalabilità a lungo termine. Per i team che desiderano eseguire carichi di lavoro transazionali all'interno di un'architettura dati unificata, Databricks Lakebase porta un database operativo all'interno della Databricks Platform ed è integrato con il lakehouse.

(Questo post sul blog è stato tradotto utilizzando strumenti basati sull'intelligenza artificiale) Post originale

Ricevi gli ultimi articoli nella tua casella di posta

Iscriviti al nostro blog e ricevi gli ultimi articoli direttamente nella tua casella di posta.