4 Gennaio 2023

Performance del Software e scelte progettuali. Quando il Database è il collo di bottiglia e PostgreSQL la soluzione a tutti i mali.

Una breve analisi su problematiche comuni del software derivate dalla scelta sbagliata degli strumenti ed in particolar modo dal preferire MySQL piuttosto che PostgreSQL.

PostgreSQL-vs-MySQL

Se c’è una cosa che mi è rimasta a mente nello staging che feci in quinto superiore (ben 23 anni fa) alla Elettromeccanica Cognigni di Civitanova Marche, fu queste poche ma significante parole “I giusti attrezzi sono già metà del lavoro“.

Questa frase fu pronunciata dal nonno di un mio caro amico, che era solito venire a trovare il titolare dell’azienda e curiosare o parlare del più o del meno, come sono soliti fare gli anziani che hanno tempo durante la giornata per coltivare le loro amicizie e fare visite qua e là.

Io ero impegnato a svuotare un indotto di un motore elettrico (un avvolgimento elettrico) battendo lo scalpello con una pinza rimediata, quando sentii queste parole altisonanti e fui successivamente invitato ad usare un martello.

Lavoro più preciso, più veloce e più confortevole. Da li a poche settimane, sarebbe finito lo stage scolastico e avrei terminato questa esperienza a contatto di accumulatori, avvolgimenti, motori elettrici, e simili, lasciando nel dimenticatoio molte delle nozioni apprese in modalità “usa e getta”, tuttavia quel prezioso consiglio e quella solenne frase pronunciata ad effetto è ancora oggi uno dei capisaldi della mia professione, e più ampiamente del mio modo di vivere.

Potremmo mangiare la minestra con la forchetta, ma sicuramente un cucchiaio è meglio.

Il problema delle applicazioni che usano MySQL

C’è un problema che riguarda tutti o quasi, principalmente riguardano tutte quelle situazioni in cui si ha a che fare con software scritto da altri che fa utilizzo di un Database MySQL o relativi fork come MariaDB, Percona Server, che sono comunque basati e derivati da MySQL stesso.

Quando si lavora con CMS come WordPress, WooCommerce, Magento, Prestashop e simili, alla fine ci si ritrova sempre ad avere a che fare con un RDBMS come MySQL o derivato, e sembra che sia normale, giusto e corretto disporre di un RDBMS che sembra anche estremamente veloce e performante.

Il problema non è un gran problema nel momento in cui il database non diventa il collo di bottiglia della nostra applicazione, e delle performance che si riflettono inevitabilmente sull’esperienza utente, sulla SEO, sul fatturato e sull’utile aziendale.

Per quanto possa aver migliorato sensibilmente nel corso degli anni la velocità e le performance di MySQL, ad esempio passando dal vecchio motore MyISAM a InnoDB bisogna sempre chiedersi se MySQL (o relativi fork) sia la migliore soluzione sul mercato in termini di feature, performance e velocità.

MySQL è estremamente lento rispetto a PostgreSQL

Ad esempio, se stessimo cercando un RDBMS compatibile con SQL Standard che sia open source, gratuito, free, ben supportato e documentato, multi architettura, portabile, estremamente performante, andremo sicuramente ad escludere soluzioni closed source commerciali e proprietarie come Oracle DB, SQL Server o DB2 di IBM.

Tuttavia, potremmo e dovremo tenere in considerazione PostgreSQL o semplicemente Postgres.

PostgreSQL è un potente sistema di database relazionale a oggetti open source con oltre 35 anni di sviluppo attivo che gli è valso una solida reputazione per affidabilità, robustezza delle funzionalità e prestazioni.

Noto anche come Postgres , è un sistema di gestione di database relazionale gratuito e open-source ( RDBMS) enfatizzando l’estensibilità e la conformità SQL. Originariamente era chiamato POSTGRES, in riferimento alle sue origini come successore del database Ingres sviluppato presso l’ Università della California, Berkeley . Nel 1996, il progetto è stato rinominato in PostgreSQL per riflettere il suo supporto per SQL . Dopo una revisione nel 2007, il team di sviluppo ha deciso di mantenere il nome PostgreSQL e l’alias Postgres. 

PostgreSQL presenta transazioni con proprietà Atomicity, Consistency, Isolation, Durability (ACID), viste aggiornabili automaticamente , viste materializzate , trigger , chiavi esterne e stored procedure . È progettato per gestire una vasta gamma di carichi di lavoro, da singole macchine a data warehouse o servizi Web con molti utenti simultanei . È il database predefinito per macOS Server ed è disponibile anche per Windows , Linux ,FreeBSD e OpenBSD .

Ma quanto è lento MySQL rispetto a PostgreSQL?

O meglio, quanto è più veloce PostgreSQL rispetto a MySQL ?

Come ho eseguito il benchmark dei database?

  1. Quale database ha le scritture più veloci
  2. Quale database ha le letture più veloci
  3. Quale database ha il minore utilizzo di memoria e CPU

Preparazione

PostgreSQL

docker run --name postgres -e POSTGRES_PASSWORD=password -p 5433:5432 -v postgres_data:/var/lib/postgresql/data -d postgres:alpine

Timescale DB

docker run --name timescale -e POSTGRES_PASSWORD=password -p 5434:5432 -v timescale_data:/var/lib/postgresql/data -d timescale/timescaledb:latest-pg12

MySQL

docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -v mysql_data:/var/lib/mysql -d mysql:latest

MariaDB

docker run --name mariadb -e MYSQL_ROOT_PASSWORD=password -p 3307:3306 -v mariadb_data:/var/lib/mysql -d mariadb:latest

Percona Server

docker run --name percona -e MYSQL_ROOT_PASSWORD=password -p 3308:3306 -v percona_data:/var/lib/mysql -d percona:ps-8

Primo confronto

Da questi risultati, sembra che PostgreSQL sia il vincitore e SQL Server il perdente. Ma non abbiamo ancora fatto alcun benchmark di lettura e/o scrittura.

Benchmark di scrittura.

Write Benchmark DBMS SQL

Benchmark di lettura.

Read Benchmark DBMS SQL

La famiglia di motori Postgres è circa due volte più veloce della famiglia di motori MySQL.

Perché MySQL è più utilizzato e diffuso di PostgreSQL ?

MySQL è uno dei sistemi di gestione di database più diffusi al mondo, nonostante le sue prestazioni non siano paragonabili a quelle di altri database come PostgreSQL. Ci sono diverse motivazioni per cui MySQL è più diffuso rispetto a PostgreSQL, nonostante le prestazioni di quest’ultimo siano superiori.

Innanzitutto, MySQL ha una storia più lunga rispetto a PostgreSQL e quindi ha avuto più tempo per diffondersi e diventare popolare. MySQL è stato rilasciato per la prima volta nel 1995, mentre PostgreSQL è stato rilasciato nel 1996. Ciò significa che MySQL ha avuto un anno in più per diffondersi e diventare conosciuto dai programmatori e dai professionisti del settore.

Inoltre, MySQL è spesso incluso come componente predefinito in molti sistemi operativi e stack di sviluppo, il che lo rende facilmente accessibile a chiunque abbia bisogno di un database. Inoltre, MySQL ha una documentazione molto ampia e una forte presenza online, il che lo rende facile da imparare e da utilizzare per i programmatori alle prime armi.

Infine, MySQL è spesso scelto dalle aziende a causa della sua semplicità e della sua capacità di gestire grandi quantità di dati. MySQL non richiede conoscenze avanzate di amministrazione di sistema per essere utilizzato e può gestire facilmente grandi quantità di dati, il che lo rende ideale per le aziende che hanno bisogno di un database scalabile e facile da gestire.

Impatto sull’ambiente di PostgreSQL rispetto a MySQL.

Utilizzare PostgreSQL invece di MySQL potrebbe avere un impatto positivo sull’ambiente. PostgreSQL è noto per la sua efficienza e velocità, il che significa che può gestire grandi quantità di dati con un consumo di risorse inferiore rispetto a MySQL. Ciò può portare a una riduzione delle emissioni di CO2, poiché i server utilizzeranno meno energia per eseguire le stesse operazioni.

L’utilizzo di PostgreSQL piuttosto che MySQL potrebbe significare ad esempio ridurre il numero dei server all’interno di un’organizzazione, evitare l’utilizzo di Cluster MySQL per sopperire problematiche di performance, nonché evitare un ricambio o un upgrade dell’hardware sia per lo scaling verticale (aumento delle risorse sulla singola macchina), sia per lo scaling orizzontale, ovvero aumentare nodi e macchine.

Conclusioni.

Abbiamo visto come in base ai benchmark sopra citati PostgreSQL sia decisamente migliore e più consigliato per una serie di vantaggi sia in termini di performance e velocità che nell’utilizzo più efficiente della memoria, senza per questo dover rinunciare all’open source o un sistema di licenza libera che permette di adottarlo senza vincoli alcuni a software ed applicazioni gratuite.

Viene dunque da chiedersi come mai e perchè molte realtà, tra cui i CMS più utilizzati come WordPress, Prestashop, Magento, Joomla, abbiano deciso di continuare ad utilizzare un DBMS come MySQL e derivati che di fatto non ha quella caratura e quei requisiti tali da renderlo appetibile rispetto alla controparte PostgreSQL.

Verrebbe da tirare in ballo moltissime considerazioni in merito all’efficienza del software nonchè all’impatto sui consumi e sull’ambiente se si considera questo ragionamento applicato su larga scala, permettendo ad esempio di ridurre il numero di nodi di un cluster o di poter evitare in alcuni casi lo scaling orizzontale o verticale per far fronte all’inefficienza del database.

Tuttavia, eccetto qualche progetto sporadico piuttosto acerbo da usare in produzione con le dovute garanzie, non sembra ancora esserci futuro per PostgreSQL nell’utilizzo come backend per i CMS più popolati sopra citati.

Un vero peccato se si considera che il grado di maturità di PostgreSQL è talmente elevato da non avere praticamente più rivale alcuno (se non forse Oracle DB).

 

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Hetzner Online GmbH detiene i diritti su Hetzner®; OVHcloud è un marchio registrato di OVH Groupe SAS; cPanel®, L.L.C. detiene i diritti su cPanel®; Plesk® è un marchio registrato di Plesk International GmbH; Facebook, Inc. detiene i diritti su Facebook®. Questo sito non è affiliato, sponsorizzato o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello europeo da MANAGED SERVER SRL, Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italia.

SOLO UN ATTIMO !

Vorresti vedere come gira il tuo WooCommerce sui nostri sistemi senza dover migrare nulla ? 

Inserisci l'indirizzo del tuo sito WooCommerce e otterrai una dimostrazione navigabile, senza dover fare assolutamente nulla e completamente gratis.

No grazie, i miei clienti preferiscono il sito lento.
Torna in alto