GNU/Linux >> Linux Esercitazione >  >> Linux

MongoDB contro MySQL

Introduzione

L'ampia varietà di sistemi di gestione di database (DBMS) offerti è senza dubbio una buona cosa. Tuttavia, significa anche che la scelta del sistema di database giusto per le tue esigenze richiede molto di più che utilizzare l'opzione più popolare.

Dalle differenze tra i modelli di transazione alla qualità del supporto, i DBMS sono disponibili in tutte le forme e dimensioni.

In questo articolo di confronto, leggerai le differenze tra le due popolari soluzioni DBMS:MongoDB e MySQL.

Cos'è MongoDB?

MongoDB è un sistema di gestione di database NoSQL multipiattaforma, come Cassandra o Redis. Tuttavia, a differenza di questi sistemi, MongoDB è orientato ai documenti. Utilizza documenti simili a JSON chiamati file BSON come posizioni per i suoi archivi di documenti. Poiché il file BSON è una modifica del formato JSON, MongoDB è completamente compatibile con JavaScript Object Notation.

Un'altra caratteristica importante di MongoDB è che è privo di schemi. Non richiede la definizione di una struttura fissa durante la creazione del documento e semplifica notevolmente la modifica della struttura del record in un secondo momento.

Lo sviluppo di MongoDB è iniziato nel 2007 e nel 2009 è diventato open-source. MongoDB Inc., la società dietro il software, offre supporto commerciale per il sistema.

Al momento della stesura di questo articolo, l'ultima versione di MongoDB è la 4.4.3 di dicembre 2020.

Cos'è MySQL?

MySQL è un sistema di gestione di database relazionali (RDBMS). È un'implementazione open source di SQL, Structured Query Language. I database relazionali come MySQL, Oracle o PostgreSQL sono simili perché organizzano i dati in tabelle. Queste tabelle contengono tipi di dati correlati che aiutano a strutturare i dati.

MySQL memorizza i dati correlati in un numero qualsiasi di tabelle separate. L'esecuzione di query e la correlazione dei dati da tali tabelle è facilitata dalle operazioni JOIN, che consentono la creazione di tabelle temporanee e set di righe utilizzando i dati di più tabelle.

Oracle è l'azienda che possiede e offre supporto per MySQL. Al momento della stesura di questo articolo, l'ultima versione stabile di MySQL è la 5.7.32 di ottobre 2020.

MongoDB vs. MySQL:panoramica del confronto

MongoDB e MySQL sono due sistemi di gestione di database fondamentalmente diversi. Confrontarli è utile perché sono buoni rappresentanti delle rispettive filosofie di gestione. Per ulteriori informazioni, vedere NoSQL vs. SQL.

La tabella seguente è un confronto testa a testa degli aspetti essenziali di entrambi i DBMS.

MongoDB MySQL
Tipo di database NoSQL orientato ai documenti DBMS relazionale
Lingua di programmazione C++, C, JavaScript C++, C
Schema Dinamico Statico
Archiviazione dati BSON (formato simile a JSON) Tabelle (righe e colonne)
Lingua di query MQL (predefinito), ma funziona con molte lingue SQL
Riduci mappa No
Conversione database No
Analisi delle prestazioni No
Modello di transazione BASE ACID
Isolamento No
Integrità referenziale No
Transazioni complesse No
Ridimensionamento Orizzontale Verticale
Località dati No
Sharding automatico No
Modalità di replica Maestro-Schiavo Master-Slave, Master-Master

Di seguito è riportata una panoramica dettagliata delle aree di confronto più significative per MongoDB e MySQL.

Struttura del database (schema)

MongoDB :MongoDB memorizza i dati nei documenti. Questi documenti hanno varie strutture, a seconda dei requisiti del database. Il sistema memorizza i dati correlati insieme per facilitare l'esecuzione di query rapide.

La flessibilità dell'approccio orientato ai documenti in MongoDB è uno dei suoi maggiori vantaggi rispetto a MySQL e ad altri DBMS relazionali. MongoDB non ha bisogno di uno schema di tabella da dichiarare prima di consentire l'input dei dati.

Una raccolta di documenti MongoDB può presentare documenti con diversi insiemi di campi. Il tipo di dati del campo può anche variare tra i documenti. L'aggiunta o la rimozione di campi all'interno di un documento viene eseguita semplicemente aggiornando la struttura del documento. Lo stesso vale per la modifica dei tipi di dati del campo.

Un'operazione di scrittura in MongoDB è atomica a livello di documento. Ciò vale anche nei casi in cui un'operazione interessa più documenti incorporati. Le operazioni di scrittura su più documenti mantengono l'atomicità a livello di documento ma non sono atomiche di per sé.

MongoDB supporta transazioni multi-documento su set di repliche e cluster partizionati.

MySQL :i dati in MySQL vengono archiviati in tabelle, che vengono create prima dell'aggiunta di qualsiasi dato. Ogni tabella del database è composta da righe e colonne. Le righe rappresentano le entità del database e le colonne forniscono informazioni sulle entità.

Gli schemi statici definiscono la struttura del database e richiedono che tutte le righe abbiano la stessa struttura. MySQL ha un limite fisso di 4096 colonne per tabella e una dimensione massima della riga di 65.535 byte.

Lo schema di sistema è costituito da tabelle contenenti le informazioni necessarie per il funzionamento ininterrotto del server MySQL. Queste informazioni includono tabelle del dizionario di dati con metadati degli oggetti del database e altre tabelle del sistema operativo.

A causa della rigidità dell'architettura di MySQL, la creazione e la gestione del database richiedono molta pianificazione in anticipo per mantenere prestazioni elevate quando il database inizia a crescere.

Ottimizzazione dell'indice

MongoDB :MongoDB utilizza gli indici per l'ottimizzazione. Senza indici, MongoDB esamina tutti i documenti di una raccolta per trovare una corrispondenza per una query.

MySQL :Proprio come MongoDB, MySQL utilizza gli indici per ottimizzare le query. Se non ci sono indici rilevanti per una particolare query, MySQL ricerca l'intera tabella.

Distribuzione database

MongoDB :gli utenti possono distribuire MySQL in modo nativo su Microsoft Windows, OS X, Linux e Solaris. MongoDB è adatto anche per ambienti distribuiti come i container Docker.

MySQL :MySQL ha binari per vari sistemi operativi, come Microsoft Windows, OS X, Linux, FreeBSD, NetBSD, Solaris, ecc. Le immagini MySQL Docker mantenute ufficialmente sono create solo per piattaforme Linux.

Lingua di query

MongoDB :Il motore di MongoDB può interagire con molti linguaggi di programmazione diversi, a seconda delle preferenze del programmatore. Per impostazione predefinita, tuttavia, MongoDB utilizza MQL (MongoDB Query Language).

MQL è un linguaggio simile a SQL progettato per eseguire query su dati non strutturati. Le query in MongoDB sono basate su JavaScript.

Ad esempio, ecco come viene creata una raccolta in MongoDB:

db.fruit.insertMany([
   { item: "apple", qty: 2, color: “red”, status: "A" },
   { item: "pear", qty: 5, color: “yellow”, status: "A" },
   { item: "cherry", qty: 4, color: “red”, status: "A" }
]);

L'interrogazione di una raccolta viene eseguita utilizzando il find comando:

db.fruit.find( { color: "red" } )

MySQL :Come molti RDBMS, MySQL utilizza SQL. L'esempio della sintassi utilizza i dati dell'esempio MQL sopra.

Innanzitutto, gli utenti MySQL devono creare una tabella:

CREATE TABLE IF NOT EXISTS `fruit` (
  `item` varchar(200) NOT NULL,
  `qty` int(3) unsigned NOT NULL,
  `color` varchar(200) NOT NULL,
  `status` varchar(200) NOT NULL,
  PRIMARY KEY (`qty`)
) DEFAULT CHARSET=utf8;

Successivamente, la tabella viene popolata con i dati:

INSERT INTO `fruit` (`item`, `qty`, `color`, `status`) VALUES
  ('apple', '2', 'red', 'A'),
  ('pear', '5', 'yellow', 'A'),
  ('cherry', '4', 'red', 'A');

Creazione della vista per filtrare i dati:

CREATE VIEW red_fruit AS SELECT item FROM fruit WHERE color = 'red';

Una volta che lo schema esiste, l'interrogazione della tabella viene eseguita utilizzando il SELECT dichiarazione:

SELECT * FROM red_fruit;

Replica dei dati e clustering

MongoDB :lo scopo della replica dei dati è offrire continuità operativa e disponibilità dei dati. MongoDB conserva più repliche di dati su server isolati. Questa replica aiuta a prevenire la perdita di dati dovuta a circostanze impreviste come arresti anomali del server, interruzioni di corrente, ecc.

Un set di repliche è un insieme di istanze mongod che gestiscono lo stesso set di dati. Essendo il processo principale del demone MongoDB, mongod gestisce le richieste di dati, controlla l'accesso ai dati e conduce operazioni in background. Un set di repliche è costituito da un numero di nodi di dati, di cui uno è il nodo primario che gestisce tutte le operazioni di scrittura, mentre gli altri sono secondari.

Ogni volta che viene avviato un set di repliche, o si verifica una modifica nel set relativa al numero di nodi, come l'aggiunta di un nuovo nodo o la perdita di una connessione con il nodo primario per un periodo di tempo superiore a quello consentito, il sistema attiva elezioni automatiche . Lo scopo delle elezioni è determinare se il nodo dati primario corrente deve rimanere primario.

MongoDB supporta anche lo sharding , che consente il ridimensionamento orizzontale tramite il clustering di partizioni. Lo sharding è un metodo di distribuzione dei dati su più computer, che consente la lettura e la scrittura di dati lungo un certo numero di nodi. Nessun singolo nodo gestisce tutti i dati, quindi i dati vengono distribuiti su tutti i nodi in uno shard.

Quando si lavora con set di dati di grandi dimensioni e velocità effettiva elevata, lo sharding aiuta a ridurre il carico su un singolo server e consente la scalabilità tramite l'aggiunta o la rimozione di server, a seconda delle necessità.

MySQL :MySQL supporta i seguenti tipi di replica pronti all'uso:

  • Replica asincrona master-slave, in cui il processo passa da un master a un numero qualsiasi di slave e viceversa. Il master non attende che gli slave confermino la ricezione dell'evento. Le modifiche al database vengono messe in coda e scritte in un secondo momento.
  • Replica master-slave semi sincrona, con master in attesa di replica di un solo slave per confermare la ricezione dell'evento.
  • Replica multi-master sincrona, che consente di archiviare i dati su più computer e aggiornarli da qualsiasi membro del gruppo. Tutti gli slave sono tenuti a confermare la ricezione degli eventi.

Sebbene MySQL non supporti da solo lo sharding automatico e il clustering, gli utenti possono ottenere alcune delle funzionalità attraverso la tecnologia MySQL Cluster.

Sicurezza

MongoDB :MongoDB utilizza un'autenticazione basata sui ruoli. Altre funzionalità di sicurezza includono il controllo e l'autorizzazione e il supporto TLS e SSL per scopi di crittografia.

Il principale vantaggio di MongoDB relativo alla sicurezza rispetto a MySQL è la sua resistenza agli attacchi SQL injection. SQL injection è una vulnerabilità che consente a un utente malintenzionato di accedere alle query del database eseguite da un'app. L'autore dell'attacco può utilizzare questa vulnerabilità per accedere, modificare o eliminare i dati dell'app. Un'iniezione SQL può persino compromettere il server stesso.

Dato che l'architettura di MongoDB utilizza documenti simili a JSON per spiegare la query e che le query sono rappresentate come oggetti JSON binari (BSON) sicuri, l'iniezione diretta di stringhe è impossibile.

MySQL :MySQL utilizza un modello di sicurezza basato sui privilegi. Ogni utente viene autenticato e gli vengono assegnati privilegi specifici per creare, interrogare o modificare tabelle. SSL fornisce la crittografia della connessione.

Gli attacchi SQL injection sono la più grande vulnerabilità di MySQL. Tuttavia, ci sono alcune misure che possono essere adottate per ridurre il rischio di un attacco, come l'utilizzo di query parametrizzate invece di un input utente concatenato. Questo è particolarmente importante in WHERE clausole e INSERT o UPDATE dichiarazioni.

Scalabilità

MongoDB :Il ridimensionamento orizzontale è uno dei principali vantaggi di MongoDB rispetto a MySQL. Utilizzando lo shard clustering, MongoDB distribuisce i dati tra le macchine, il che aiuta i casi d'uso che includono il lavoro con set di dati di grandi dimensioni.

MySQL :Come accennato in precedenza, MySQL non supporta lo sharding predefinito. Il ridimensionamento di un database in MySQL (e molte altre soluzioni RDBMS popolari) richiede la modifica dell'applicazione utilizzando il database o il tempo di inattività fino al completamento della migrazione a un server più grande.

Velocità e prestazioni

MongoDB :In quanto database NoSQL, MongoDB è più veloce di MySQL grazie al suo modello di query, che consente variazioni a seconda del tipo e delle dimensioni del lavoro. La velocità di MongoDB è particolarmente evidente in scenari che includono database di grandi dimensioni.

MySQL :Sebbene MySQL sia il più lento dei due, le sue prestazioni possono essere notevolmente migliorate con l'ottimizzazione.

Supporto e documentazione

MongoDB :MongoDB Inc. offre supporto di livello aziendale 24 ore su 24, 7 giorni su 7 e un componente aggiuntivo per il supporto del ciclo di vita esteso. Il supporto include una ricca knowledge base, versioni di manutenzione, aggiornamenti, patch e correzioni di bug. Essendo un nuovo attore sul mercato, MongoDB ha una comunità online più piccola di MySQL.

MySQL :In quanto prodotto Oracle, MySQL offre Oracle Lifetime Support 24 ore su 24, 7 giorni su 7 in tre livelli:il supporto Premier include versioni fino a 5 anni, il livello esteso è per le versioni tra i 6 e gli 8 anni, mentre Sustain supporta tutte le versioni precedenti agli otto anni . Una community online molto attiva aiuta gli utenti a trovare rapidamente soluzioni a molti problemi.

Casi d'uso

MongoDB :MongoDB, come altre soluzioni NoSQL, offre prestazioni migliori nei casi d'uso che richiedono un modo flessibile e fluido per manipolare i dati, come ad esempio:

  • Analisi in tempo reale
  • Data warehouse
  • App mobili
  • Sistemi di gestione dei contenuti

L'elenco delle aziende che utilizzano MongoDB nei loro stack tecnologici include Lyft, Adobe, Codecademy, ecc.

MySQL :Gli istituti che si occupano di transazioni finanziarie e altri che richiedono la conformità ACID scelgono MySQL rispetto a MongoDB. L'elenco delle aziende che utilizzano MySQL è più lungo e include Airbnb, Netflix, Amazon, Shopify, ecc.

È importante notare che alcune aziende, come Uber, utilizzano sia MongoDB che MySQL per diversi scenari di utilizzo all'interno dell'azienda.

Come scegliere?

Non c'è un chiaro vincitore nel confronto tra MongoDB e MySQL perché questi due sistemi di gestione del database soddisfano due campi significativamente diversi. Scegliere la giusta soluzione richiede un'attenta analisi delle proprie esigenze particolari.

Scegli MongoDB se necessario:

  • Aumenta la disponibilità – La tecnologia di replica dei dati di MongoDB e l'uso di più nodi per l'archiviazione dei dati garantiscono una maggiore disponibilità. MySQL può replicare i dati anche tra i nodi, ma il processo è complesso e richiede tempo.
  • Accelera lo sviluppo – la flessibilità del formato JSON è particolarmente vantaggiosa per gli sviluppatori di app, che preferiscono rappresentare i dati in array e documenti secondari piuttosto che in righe e colonne rigide.
  • Scala orizzontalmente – MongoDB consente il ridimensionamento orizzontale senza apportare modifiche all'applicazione o subire tempi di inattività.

Scegli MySQL se tu:

  • Gestire transazioni di denaro sicure – Le transazioni MySQL vengono trattate come singole unità e non vengono cancellate finché ogni singola fase operativa non viene completata con successo. Se una delle fasi fallisce, l'intera operazione fallisce. Questa caratteristica di MySQL garantisce l'integrità dei dati necessaria per le transazioni finanziarie.
  • Hai bisogno di un supporto transazionale completo – Le transazioni MySQL seguono lo standard ACID, il che significa che sono atomiche, coerenti, isolate e durevoli.
  • Hai bisogno di un supporto migliore – MySQL è in circolazione da molto più tempo di MongoDB, quindi trovare soluzioni per problemi comuni su Internet è molto più facile se usi MySQL. A un livello superiore, la gestione di un database NoSQL come MongoDB richiede una maggiore competenza tecnica rispetto a MySQL.

Linux
  1. Installa MariaDB o MySQL su Linux

  2. Riparazione di database MySQL InnoDB

  3. Elimina tabelle in MySQL

  4. Metodi di connessione MySQL

  5. Utilità di pianificazione eventi MySQL

Installa MongoDB su Ubuntu 20.04

Server database MySQL

Panoramica di MySQL

Installa MongoDB su Ubuntu 18.04

Che cos'è MySQL vs MariaDB vs Percona

Come installare Mongodb in CentOS?