Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Comparazione DB
SQL vs NoSQL
SQL:
Tabelle riferite le une alle altre
Linguaggio SQL
Schema fisso e predefinito per ogni record
Dati divisi in righe (singolo record) e colonne (attributi)
Dati su un singolo server (generalmente) -> https://www.marklogic.com/blog/relational-databases-
scale/
Scalabilità incrementando l’hardware del server -> costoso
Grandi performance in r/w su database piccoli/medi, migliorate con l’aggiunta di indici. Performance
peggiori con la crescita del database*
Grande sicurezza e integrità per la sua propria struttura relazionale e le proprietà ACID (atomicity,
consistency, isolation, durability) intrinseche
Prestazioni migliori su interrogazioni complesse
NoSQL:
Orientato ai documenti -> gestiti come JSON (MongoDB)
Dati come coppie di chiave (stringa)-valore
Dati salvati come grafo
Struttura variabile in base al documento
Flessibile riguardo a tipi di dati e struttura/attributi -> si adatta facilmente ai cambiamenti
Semplice modifica struttura dati -> Metodologie agili
Facile da interrogare -> funzioni simil JavaScript
Ottima scalabilità -> si condividono i file su più server, ognuno ne contiene solo una parte
Ottima performance -> design distribuito, abbassa il carico di lavoro del sistema -> replica dei dati
Fornisce accesso simultaneo a molti utenti
Debole sicurezza*
Prestazioni peggiorano su interrogazioni più complesse
Categorie di DB NoSQL:
Key-Value
Dizionari che accedono ai diversi oggetti, a ciascuno dei quali è associata una chiave unica
(es. Redis)
Document
Contiene dati semi-strutturati, ogni documento può avere una struttura diversa e contiene i propri
campi necessari (es. MongoDB)
Graph
Organizza i dati come un grafo con nodi e relazioni, che mostrano le connessioni tra nodi. Utilizzato
soprattutto in social network o sistemi di prenotazioni (es. Neo4j)
Column-oriented
Salvano e gestiscono i dati come tabelle, righe e colonne, con strutture variabili da riga a riga. Può
essere considerato come un database key-value a due dimensioni. (es. Cassandra)
DB Relazionali
Cos’è un DBMS?
È un tipo di software che permette all’utente di comunicare direttamente con la base di dati, applicazioni,
interfacce utente per ottenere dati e interpretarli. Contiene anche le regole chiave per la gestione e il
mantenimento del DB
MySQL
Pro:
Installazione gratuita
Semplice sintassi e utilizzo
Compatibilità nel cloud
Grande popolarità
Contro:
Difficile scalabilità
Supporto open source incompleto (ora software proprietario)
Linguaggio non completamente conforme agli standard SQL
MariaDB
Pro:
Open source fork di MySQL -> Massima sicurezza dei dati
Funzionalità varie -> sharding e plugin di terze parti
Performance ottime per un DB relazionale
Contro:
Piccolo numero di professionisti specializzati (creato nel 2010)
Possibili difficoltà di migrazione da MySQL a MariaDB (funzionalità rilasciate solo in versioni
commerciali)
Oracle
Pro:
Grande supporto e documentazione
Gestione di grandi collezioni di dati
Contro:
Alto costo
Necessità di hardware di alta qualità
Difficoltà di apprendimento
PostgreSQL
Pro:
Ottima scalabilità verticale*
Alta flessibilità (accetta vari tipi di dati e fornisce supporti a funzionalità NoSQL)
Ben integrato con strumenti di terze parti
Open-source
Contro:
No chiara documentazione
Assenza di strumenti di report
Contro:
Alto costo
Condizioni di licenza variabili
DB Non relazionali
MongoDB
Pro:
Accesso e modifica dei dati semplice e veloce
Grande scalabilità (orizzontale)*
Ottima compatibilità con altri modelli di dati
Contro:
Grande utilizzo di memoria
Poca sicurezza (NoSQL)
Difficile interpretazione da altri linguaggi (transizione SQL-NoSQL)
Prodotti per analisi di dati o che necessitano di grande scalabilità (es. catalogo di prodotti)
Cassandra
Pro:
Sicurezza dei dati (database distribuito->dati replicati in vari nodi)
Facile scalabilità (aggiunta nodi/server)
Flessibilità nel linguaggio (prende il meglio da SQL e NoSQL)
Contro:
Bassa velocità in lettura
Proprio linguaggio (CQL)
Fonti: https://cassandra.apache.org/
https://www.spiceworks.com/tech/big-data/articles/what-is-cassandra/
Redis
Pro:
Incredibile velocità (i dati risiedono formattati su disco e vengono ricostruiti ogni volta in
memoria all’accensione)
Enorme quantità di dati manipolabili in tempi ridotti
Linguaggio snello
Replica asincrona su server diversi
Open source
Contro:
Durabilità e coerenza dati
Linguaggio “particolare”
Dipendenza dalla memoria
No supporto per linguaggi di interrogazione o join
Fonti: https://redis.io/
Neo4j
Pro:
Gestione chiara e semplice delle relazioni (molto più semplice dei join relazionali)
Strutture flessibili e agili
Alta velocità (dipendente dal numero di connessioni e non di nodi)
Open source
Contro:
Linguaggio non banale
Alta difficoltà nella scalabilità
Applicazioni con transazioni real time, metadata e advanced analysis, gestione di processi di
business interni
Fonti: https://neo4j.com/developer/graph-database/
MongoDB: Il database per idee giganti. MongoDB salva dati in documenti JSON che possono variare in
struttura, fornendo uno schema dinamico e flessibile. MongoDB è stato progettato per dati con grande
disponibilità e scalabilità, fornisce anche funzioni di replicazione e auto-frammentazione.
MongoDB Atlas è un servizio di database cloud, creato e utilizzato dal team dietro lo sviluppo di MongoDB,
che gestisce autonomamente tutta la complessità di distribuzione e gestione della base di dati. Sfrutta a
pieno la flessibilità e la scalabilità di un database non relazionale e permette di sfruttare la semplicità e gli
automatismi di un servizio interamente gestito sulla piattaforma cloud preferita.
MongoDB appartiene alla categoria “Database”, mentre Atlas può essere classificato come “Hosting di
MongoDB”.
MongoDB è un tool open source, molto considerate su GitHub, tanto che aziende globali come Uber, Lyft e
Codecademy lo utilizzano.
Ottimo per chi non ha tempo o risorse per gestire tutta l’infrastruttura che necessita un cluster MongoDB.
Focus più sull’applicazione che sulla gestione del database.
Fonte: https://stackshare.io/stackups/mongodb-vs-mongodb-atlas#:~:text=MongoDB%20was%20also
%20designed%20for,by%20the%20team%20behind%20MongoDB.
https://www.altexsoft.com/blog/business/comparing-database-management-systems-mysql-postgresql-
mssql-server-mongodb-elasticsearch-and-others/
https://www.oracle.com/database
https://www.mongodb.com/
https://www.ibm.com/cloud/blog/sql-vs-nosql