Motore di banca dati - Database engine

Un motore di database (o motore di archiviazione ) è il componente software sottostante che un sistema di gestione del database (DBMS) utilizza per creare, leggere, aggiornare ed eliminare i dati (CRUD) da un database . La maggior parte dei sistemi di gestione del database include la propria interfaccia di programmazione dell'applicazione (API) che consente all'utente di interagire con il motore sottostante senza passare attraverso l'interfaccia utente del DBMS.

Il termine "motore di database" è spesso usato in modo intercambiabile con " server di database " o "sistema di gestione di database". Una "istanza di database" si riferisce ai processi e alle strutture di memoria del motore di database in esecuzione .

Motori di archiviazione

Molti dei moderni DBMS supportano più motori di archiviazione all'interno dello stesso database. Ad esempio, MySQL supporta InnoDB e MyISAM .

Alcuni motori di archiviazione sono transazionali .

Nome Licenza Transazionale
Aria GPL No
Falco GPL
InnoDB GPL
MyISAM GPL No
InfiniDB GPL No
TokuDB GPL
WiredTiger GPL
XtraDB GPL
RocksDB GPL v2 o Apache 2.0

Ulteriori tipi di motore includono:

Considerazioni sul design

Le informazioni in un database sono memorizzate come bit disposti come strutture di dati in memoria che possono essere lette e scritte in modo efficiente date le proprietà dell'hardware. In genere, lo storage stesso è progettato per soddisfare i requisiti di varie aree che utilizzano ampiamente lo storage, inclusi i database. Un DBMS in funzione utilizza sempre contemporaneamente più tipi di storage (es. memoria e storage esterno), con rispettivi metodi di layout.

In linea di principio, l'archiviazione del database può essere vista come uno spazio di indirizzamento lineare , dove ogni bit di dati ha il suo indirizzo univoco in questo spazio di indirizzamento. In pratica, solo una piccolissima percentuale di indirizzi viene mantenuta come riferimento iniziale (che richiede anche la memorizzazione); la maggior parte dei dati è accessibile per indiretto utilizzando calcoli di spostamento (distanza in bit dai punti di riferimento) e strutture dati che definiscono percorsi di accesso (utilizzando puntatori) a tutti i dati necessari in modo efficace, ottimizzato per le operazioni di accesso ai dati necessarie.

Gerarchia di archiviazione del database

Un database, mentre è in funzione, risiede contemporaneamente in più tipi di storage, formando una gerarchia di storage . Per la natura dei computer contemporanei, la maggior parte della parte del database all'interno di un computer che ospita il DBMS risiede (parzialmente replicata) in un archivio volatile. I dati (pezzi del database) che vengono elaborati/manipolati risiedono all'interno di un processore, possibilmente nelle cache del processore . Questi dati vengono letti/scritti in memoria, in genere attraverso un bus del computer (finora componenti di archiviazione tipicamente volatili). La memoria del computer comunica dati (trasferiti a/da) storage esterno, in genere tramite interfacce o reti di storage standard (ad esempio, fibra ottica , iSCSI ). Un array di archiviazione, un'unità di archiviazione esterna comune, in genere ha una propria gerarchia di archiviazione, da una cache veloce, tipicamente costituita da DRAM (volatile e veloce) , che è collegata (sempre tramite interfacce standard) a unità, possibilmente con velocità diverse, come unità flash e unità disco magnetico (non volatili). Le unità possono essere collegate a nastri magnetici , sui quali tipicamente possono risiedere le parti meno attive di un grande database, oppure a generazioni di backup di database.

In genere esiste attualmente una correlazione tra la velocità di archiviazione e il prezzo, mentre l'archiviazione più veloce è in genere volatile.

Strutture dati

Una struttura dati è un costrutto astratto che incorpora i dati in modo ben definito. Una struttura dati efficiente consente la manipolazione dei dati in modo efficiente. La manipolazione dei dati può includere l'inserimento, la cancellazione, l'aggiornamento e il recupero dei dati in varie modalità. Un certo tipo di struttura dati può essere molto efficace in alcune operazioni e molto inefficace in altre. Un tipo di struttura dati viene selezionato durante lo sviluppo del DBMS per soddisfare al meglio le operazioni necessarie per i tipi di dati che contiene. Il tipo di struttura dati selezionato per una determinata attività in genere prende in considerazione anche il tipo di archiviazione in cui risiede (ad esempio, velocità di accesso, dimensione minima del blocco di archiviazione a cui si accede, ecc.). In alcuni DBMS gli amministratori di database hanno la flessibilità di selezionare tra le opzioni delle strutture dati per contenere i dati dell'utente per motivi di prestazioni. A volte le strutture dati hanno parametri selezionabili per ottimizzare le prestazioni del database.

I database possono memorizzare dati in molti tipi di strutture dati. Esempi comuni sono i seguenti:

Orientamento e raggruppamento dei dati

Contrariamente al convenzionale orientamento per righe, i database relazionali possono anche essere orientati alle colonne o correlazionali nel modo in cui archiviano i dati in una particolare struttura.

In generale, si ottiene un sostanziale miglioramento delle prestazioni se diversi tipi di oggetti di database che vengono solitamente utilizzati insieme vengono archiviati in prossimità, essendo "clusterati". Questo di solito consente di recuperare gli oggetti correlati necessari dall'archiviazione in un numero minimo di operazioni di input (ognuna a volte richiede molto tempo). Anche per i database in memoria, il clustering offre vantaggi in termini di prestazioni grazie all'utilizzo comune di cache di grandi dimensioni per operazioni di input-output in memoria, con un comportamento risultante simile.

Ad esempio, può essere utile raggruppare un record di un "articolo" in stock con tutti i rispettivi record di "ordine". La decisione se raggruppare o meno determinati oggetti dipende dalle statistiche di utilizzo degli oggetti, dalle dimensioni degli oggetti, dalle dimensioni delle cache, dai tipi di archiviazione, ecc.

Indicizzazione del database

L'indicizzazione è una tecnica utilizzata da alcuni motori di archiviazione per migliorare le prestazioni del database. I molti tipi di indici condividono la proprietà comune di ridurre la necessità di esaminare ogni voce durante l'esecuzione di una query. In database di grandi dimensioni, ciò può ridurre i tempi/costi di query per ordini di grandezza. La forma più semplice di indice è un elenco ordinato di valori che possono essere cercati utilizzando una ricerca binaria con un riferimento adiacente alla posizione della voce, analogo all'indice sul retro di un libro. Gli stessi dati possono avere più indici (un database dei dipendenti potrebbe essere indicizzato per cognome e data di assunzione).

Gli indici influiscono sulle prestazioni, ma non sui risultati. I progettisti di database possono aggiungere o rimuovere indici senza modificare la logica dell'applicazione, riducendo i costi di manutenzione man mano che il database cresce e l'utilizzo del database si evolve. Gli indici possono velocizzare l'accesso ai dati, ma occupano spazio nel database e devono essere aggiornati ogni volta che i dati vengono modificati. Gli indici quindi possono velocizzare l'accesso ai dati ma rallentare la manutenzione dei dati. Queste due proprietà determinano se un dato indice vale il costo.

Riferimenti

link esterno