Capitolo 16 Motori di archiviazione alternativi

I motori di archiviazione sono componenti MySQL che gestiscono le operazioni SQL per diversi tipi di tabelle. InnoDB è il motore di archiviazione predefinito e più generico, e Oracle raccomanda di usarlo per le tabelle tranne che per casi d’uso specializzati. (L’istruzione CREATE TABLE in MySQL 8.0 crea tabelle InnoDB per impostazione predefinita)

MySQL Server usa un’architettura di motori di archiviazione pluggable che permette di caricare e scaricare i motori di archiviazione da un server MySQL in funzione.

Per determinare quali motori di archiviazione supporta il tuo server, usa l’istruzione SHOW ENGINES. Il valore nella colonna Support indica se un motore può essere usato. Un valore di YES, NO, o DEFAULT indica che un motore è disponibile, non disponibile, o disponibile e attualmente impostato come motore di archiviazione predefinito.

mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...

Questo capitolo copre i casi d’uso per motori di archiviazione MySQL speciali. Non copre lo storage engine predefinito InnoDB o lo storage engine NDB che sono trattati nel Capitolo 15, Il motore di archiviazione InnoDB e nel Capitolo 23, MySQL NDB Cluster 8.0. Per gli utenti avanzati, contiene anche una descrizione dell’architettura dello Storage Engine pluggable (vedi Sezione 16.11, “Panoramica dell’architettura dello Storage Engine MySQL”).

Per informazioni sulle caratteristiche offerte nei binari commerciali di MySQL Server, vedi MySQL Editions, sul sito web di MySQL. I motori di archiviazione disponibili potrebbero dipendere dall’edizione di MySQL che stai usando.

Per le risposte alle domande più comuni sui motori di archiviazione di MySQL, vedi la Sezione A.2, “MySQL 8.0 FAQ: Storage Engines”.

MySQL 8.0 Storage Engines supportati

  • InnoDB: Lo storage engine predefinito in MySQL 8.0. InnoDB è un motore di archiviazione transaction-safe (ACID compliant) per MySQL che ha capacità di commit, rollback e crash-recovery per proteggere i dati degli utenti. Il lock a livello di riga InnoDB (senza escalation ai lock a granularità più grossa) e le letture coerenti non bloccanti in stile Oracle aumentano la concorrenza multiutente e le prestazioni. InnoDB memorizza i dati degli utenti in indici raggruppati per ridurre l’I/O per le query comuni basate su chiavi primarie. Per mantenere l’integrità dei dati, InnoDB supporta anche i vincoli di integrità referenziale FOREIGN KEY. Per maggiori informazioni su InnoDB, vedere Capitolo 15, Il motore di archiviazione InnoDB.

  • MyISAM: Queste tabelle hanno un piccolo footprint. Il bloccaggio a livello di tabella limita le prestazioni nei carichi di lavoro in lettura/scrittura, quindi è spesso usato nei carichi di lavoro di sola lettura o per lo più in lettura nelle configurazioni Web e di data warehousing.

  • Memory: Memorizza tutti i dati nella RAM, per un accesso veloce in ambienti che richiedono ricerche veloci di dati non critici. Questo motore era precedentemente noto come motore HEAP. I suoi casi d’uso sono in diminuzione; InnoDB con la sua area di memoria buffer pool fornisce un modo generico e durevole per mantenere la maggior parte o tutti i dati in memoria, e NDBCLUSTER fornisce veloci ricerche di valori chiave per enormi insiemi di dati distribuiti.

  • CSV: Le sue tabelle sono davvero file di testo con valori separati da virgola. Le tabelle CSV ti permettono di importare o scaricare dati in formato CSV, per scambiare dati con script e applicazioni che leggono e scrivono lo stesso formato. Poiché le tabelle CSV non sono indicizzate, di solito si mantengono i dati nelle tabelle InnoDB durante le normali operazioni, e si usano le tabelle CSV solo durante la fase di importazione o esportazione.

  • Archive: Queste tabelle compatte e non indicizzate sono destinate a memorizzare e recuperare grandi quantità di informazioni storiche, archiviate o di controllo della sicurezza a cui si fa raramente riferimento.

  • Blackhole: Il motore di archiviazione Blackhole accetta ma non memorizza dati, simile al dispositivo Unix /dev/null. Le query restituiscono sempre un insieme vuoto. Queste tabelle possono essere utilizzate in configurazioni di replica in cui le istruzioni DML sono inviate ai server di replica, ma il server sorgente non mantiene la propria copia dei dati.

  • NDB (conosciuto anche come NDBCLUSTER): Questo motore di database in cluster è particolarmente adatto per applicazioni che richiedono il più alto grado possibile di uptime e disponibilità.

  • Merge: Permette a un DBA o a uno sviluppatore MySQL di raggruppare logicamente una serie di tabelle MyISAM identiche e farvi riferimento come un unico oggetto. Ottimo per ambienti VLDB come il data warehousing.

  • Federated: Offre la possibilità di collegare server MySQL separati per creare un database logico da molti server fisici. Molto buono per ambienti distribuiti o data mart.

  • Example: Questo motore serve come esempio nel codice sorgente MySQL che illustra come iniziare a scrivere nuovi motori di archiviazione. È principalmente di interesse per gli sviluppatori. Il motore di archiviazione è uno “stub” che non fa nulla. Puoi creare tabelle con questo motore, ma nessun dato può essere memorizzato in esse o recuperato da esse.

Non sei limitato ad usare lo stesso motore di memorizzazione per un intero server o schema. Si può specificare il motore di archiviazione per qualsiasi tabella. Per esempio, un’applicazione potrebbe usare principalmente tabelle InnoDB, con una tabella CSV per esportare i dati in un foglio di calcolo e alcune tabelle MEMORY per spazi di lavoro temporanei.

Scegliere un motore di archiviazione

I vari motori di archiviazione forniti con MySQL sono progettati con diversi casi d’uso in mente. La seguente tabella fornisce una panoramica di alcuni motori di archiviazione forniti con MySQL, con note chiarificatrici dopo la tabella.

Tabella 16.1 Storage Engines Feature Summary

Feature MyISAM Memory InnoDB Archive NDB
B-indici ad albero No No
Backup/point-in-time recovery (nota 1)
Supporto database cluster No No No No No
Indici raggruppati No No No No
Dati compressi Sì (nota 2) No No
Cache di dati No N/A No
Dati criptati Sì (nota 3) Sì (nota 3) Sì (nota 4) Sì (nota 3) Sì (nota 3)
Supporto chiave straniera No No No Sì (nota 5)
Full-indici di ricerca testuale No Sì (nota 6) No No
Supporto geospaziale supporto tipo dati No
indicizzazione geospaziale supporto No Sì (nota 7) No No
indici Hash No No (nota 8) No
Cache indice N/A No
Granularità di blocco Tabella Tabella Riga Row Row
MVCC No No No No No
Sostegno alla replica (nota 1) Limitato (nota 9)
Limiti di stoccaggio 256TB RAM 64TB Nessuno 384EB
T-indici ad albero No No No No
Transazioni No No No
Aggiornamento statistiche per dizionario dati

Note:

1. Implementato nel server, piuttosto che nel motore di archiviazione.

2. Le tabelle MyISAM compresse sono supportate solo quando si usa il formato di riga compresso. Le tabelle che usano il formato compresso con MyISAM sono di sola lettura.

3. Implementato nel server tramite funzioni di crittografia.

4. Implementato nel server tramite funzioni di crittografia; in MySQL 5.7 e successivi, è supportata la crittografia data-at-rest.

5. Il supporto per le chiavi esterne è disponibile in MySQL Cluster NDB 7.3 e successivi.

6. Il supporto per gli indici FULLTEXT è disponibile in MySQL 5.6 e successivi.

7. Il supporto per l’indicizzazione geospaziale è disponibile in MySQL 5.7 e successivi.

8. InnoDB utilizza gli indici hash internamente per la sua funzione Adaptive Hash Index.

9. Vedere la discussione più avanti in questa sezione.

.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.