Molti siti web e applicazioni archiviano comunemente i loro dati in un database. La lettura e la scrittura dei dati da un database possono influire in modo significativo sulla latenza di un’applicazione. È importante ridurre il più possibile la latenza perché gli utenti si aspettano applicazioni veloci e reattive e i siti web più veloci hanno prestazioni migliori per l’ottimizzazione dei motori di ricerca (SEO).

La scrittura su un database aggiunge latenza perché i database generalmente scrivono i dati su disco invece di tenerli in memoria. È comune che i database applichino la compressione e la crittografia, aggiungendo latenza alla lettura e alla scrittura dei dati. Per superare questi problemi, potete usare un database in-memory per archiviare e recuperare velocemente i dati dalla RAM anziché dal disco.

Questo articolo spiega come funzionano i database in-memory, alcune opzioni popolari e quali sono i compromessi rispetto a un database standard.

Cosa Sono i Database In-Memory?

I database in-memory usano la RAM dei dischi rigidi (HDD) o delle unità a stato solido (Solid-State Drives o SSD) per archiviare i dati, riducendo drasticamente la latenza di lettura e scrittura dei dati. La riduzione della latenza è dovuta a due ragioni principali. In primo luogo, l’accesso ai dati dalla memoria è più veloce rispetto a quello da un disco e, in secondo luogo, le strutture di dati utilizzate per archiviare i dati in memoria sono più semplici rispetto all’archiviazione su disco. Pertanto, l’overhead della CPU è minore durante la lettura e la scrittura dei dati.

Questa bassa latenza ha un costo, perché i dati archiviati in memoria andranno persi se un server si guasta. A differenza dell’archiviazione su disco, la memoria non conserva il suo contenuto in caso di interruzione dell’alimentazione, quindi c’è un compromesso tra resilienza e velocità.

I database in-memory sono un’opzione eccellente per le applicazioni che richiedono dati veloci o in tempo reale, come le classifiche o le analisi in tempo reale. Sono utili anche per memorizzare nella cache i dati che di solito vengono archiviati in un database basato su disco per ridurre il numero di letture e scritture sul disco e minimizzare la latenza.

La riduzione della latenza è particolarmente importante per i siti web. Gli utenti che trovano un sito web reattivo sono più propensi a continuare a usarlo. Inoltre, Google e altri motori di ricerca usano la velocità di caricamento dei siti come fattore di SEO. I siti web veloci si posizionano meglio nei risultati di ricerca, aumentando le probabilità che gli utenti visitino il vostro sito.

I Database In-Memory Spiegati Bene

Poiché i database in-memory memorizzano i dati nella RAM, hanno una latenza molto più bassa rispetto a un HDD, che usa parti meccaniche in movimento per accedere alla posizione corretta del disco. L’HDD deve poi leggere i dati e trasferirli attraverso l’interfaccia tra il dispositivo di archiviazione e il computer. Inoltre, anche con le SSD, la RAM è ancora fino a 30 volte più veloce grazie ai chip di memoria e all’interfaccia della CPU più performanti. Alcuni test di benchmarking hanno dimostrato che l’utilizzo di MySQL con Redis – un popolare database in-memory – come strato di caching può ridurre la latenza delle query fino al 25% rispetto all’utilizzo di un database MySQL indipendente.

Un grafico che rappresenta il numero di richieste con il solo MySQL e con entrambi i MySQL Redis.
Benchmark con solo MySQL e con MySQL e Redis. (Fonte immagine: DZone)

C’è un secondo motivo per cui i database in-memory sono veloci. È possibile ottimizzare le strutture di dati utilizzate dai database in-memory per un recupero più rapido. Per esempio, i database relazionali usano spesso i B-trees per gli indici, consentendo ricerche rapide e supportando la lettura e la scrittura di grandi blocchi di dati su disco. I database in-memory non hanno bisogno di scrivere blocchi di dati su disco e possono scegliere strutture di dati più performanti, riducendo ulteriormente la latenza. I database in-memory spesso memorizzano e utilizzano i dati così come sono, senza alcuna trasformazione o parsing a livello di database. Anche questo aspetto contribuisce alla riduzione della latenza, in quanto accelera i tempi di lettura e scrittura.

I database in-memory si sono fatti più popolari grazie ai miglioramenti tecnologici. Innanzitutto, il prezzo per gigabyte (GB) di RAM è diminuito notevolmente negli ultimi 20 anni, rendendo più accessibile l’uso della memoria per l’archiviazione dei dati. I miglioramenti delle soluzioni di database in-memory e dei servizi cloud gestiti hanno inoltre contribuito ad attenuare alcuni dei loro principali svantaggi.

Inoltre, i database in-memory come Redis sono ora in grado di effettuare lo snapshot dei dati dalla memoria al disco, consentendo il ripristino dei dati in caso di guasto del server. I servizi cloud offrono la georeplicazione, il che significa che le applicazioni possono rimanere in linea grazie al failing over in caso di problemi. La riduzione dei costi e il miglioramento dell’affidabilità hanno reso i database in-memory un’opzione fattibile per le applicazioni e i siti web moderni.

Vantaggi e Svantaggi dei Database In-Memory

I principali vantaggi dei database in-memory sono:

  • Migliorano le prestazioni.
  • Sono più semplici da scalare grazie al modo in cui memorizzano i dati.
  • Spesso migliorano l’affidabilità di un’applicazione.

I database in-memory di solito archiviano i dati in forma non strutturata o semi-strutturata invece che in complessi modelli relazionali. I dati non strutturati rendono più semplice la scalabilità del database, in quanto il trasferimento dei dati in rete per unire i dati presenti su più nodi non è necessario.

Migliorare l’affidabilità di un’applicazione può sembrare controintuitivo a causa della volatilità dei dati memorizzati nella RAM. Tuttavia, se usati come strato di caching, i database in-memory riducono il carico sul database primario durante i picchi di richieste. Un livello di caching può anche aiutare a ridurre i costi perché spesso è più costoso scalare un database tradizionale rispetto a un database in-memory per accelerare le richieste frequenti e poi utilizzare il database centrale per l’archiviazione a lungo termine.

I principali svantaggi dei database in-memory sono:

  • Aumentano i costi se utilizzati come unico database
  • Dimensioni di archiviazione limitate
  • Meno funzioni di sicurezza

I database in-memory generalmente non usano funzioni di sicurezza come la crittografia, poiché tutto deve essere in memoria, comprese le chiavi di crittografia. Queste caratteristiche rendono inefficace la crittografia dei dati perché qualsiasi entità malintenzionata che abbia accesso alla memoria può, in teoria, accedere anche alla chiave di crittografia.

I database in-memory possono ridurre i costi se utilizzati insieme ai database tradizionali. Tuttavia, sono spesso più costosi se utilizzati come unico database, soprattutto se si tratta di grandi quantità di dati, a causa del prezzo più elevato della memoria rispetto all’archiviazione su disco. Questo costo limita anche la quantità di dati che si possono conservare, poiché l’archiviazione di grandi serie di dati in memoria diventa costosa e spesso richiede più server.

Perché Non Tutti i Database Sono In-Memory?

Il principale inconveniente che impedisce ai database in-memory di essere onnipresenti è il costo. Sebbene i prezzi della RAM siano diminuiti in modo significativo, sono ancora molto più alti per GB rispetto agli HDD e agli SSD. Questo costo rende i database in-memory troppo costosi per le applicazioni più estese con data footprint colossali.

Se il prezzo della RAM continuerà a scendere, potrebbe arrivare il momento in cui i database in-memory diventeranno la norma e i database su disco saranno utilizzati solo in contesti di nicchia.

Casi d’Uso dei Database In-Memory

Uno degli usi più comuni dei database in-memory è il caching. Potete usare il database in-memory come strato di caching insieme a un database tradizionale. Il database in-memory memorizza i dati a cui si accede di frequente, evitando ripetute e costose ricerche nel database su disco e fornendo un’esperienza utente più veloce.

I database in-memory sono diventati famosi anche per i siti di ecommerce, i forum e i blog ad alto traffico con sezioni di commenti. Questo perché si tratta di siti altamente dinamici. I siti di ecommerce vogliono personalizzare l’esperienza utente e mostrare la disponibilità dei prodotti in tempo reale. I blog e i forum possono avere centinaia o migliaia di utenti che postano e commentano simultaneamente. Ciò significa che un sito dovrà gestire un elevato throughput di scrittura e dovrà essere in grado di servire rapidamente i contenuti e i commenti più recenti agli utenti. I database in-memory riducono la latenza nell’archiviazione dei contenuti generati dagli utenti e forniscono un’esperienza aggiornata e personalizzata.

I database in-memory sono anche ottimi candidati per le classifiche di gioco. Possono aggiornare e recuperare i dati in tempo reale e ordinarli in modo efficiente per fornire una visione aggiornata della classifica man mano che il gioco avanza.

Si possono usare anche per l’analisi in tempo reale. Consentono di inviare i dati al database e di eseguire query sulla versione più aggiornata dei dati per creare bacheche in tempo reale, analisi dei rischi e modelli di apprendimento automatico.

Esempi di Database In-Memory

La scelta di un database in-memory è molto ampia. Alcuni dei più popolari sono Redis, Memgraph e Hazelcast. Redis è il più utilizzato ed è disponibile come servizio gestito sulla maggior parte delle piattaforme cloud. Memgraph offre calcoli a grafo di dati in streaming, tutti in memoria, mentre Hazelcast offre funzionalità simili a Redis ma con modelli di caching diversi.

Redis è un comune livello di caching tra siti web e applicazioni per migliorare le prestazioni evitando costose letture del database. Questo aumento delle prestazioni è possibile anche per i siti WordPress con l’aiuto dell’add-on Redis di Kinsta. Oltre a questo componente aggiuntivo, Kinsta fornisce anche lo strumento Kinsta APM per aiutare a risolvere eventuali problemi di prestazioni con le query Redis.

I siti web che girano su Kinsta usano la cache per impostazione predefinita. Tuttavia, i siti con richieste frequenti di database possono trarre grandi benefici da Redis. La latenza del database è uno dei fattori più significativi che rallentano un sito web, ma Redis aiuta a ridurre questo peso e permette al sito web di scalare rapidamente.

Riepilogo

La latenza del database può influire in modo significativo sulla latenza complessiva di un sito web o di un’applicazione. La lettura e la scrittura sui dischi rigidi aumentano la latenza. I database in-memory riducono la latenza del database perché memorizzano i dati nella RAM. Anche quando si usano le unità SSD, la RAM è comunque più veloce perché si serve di chip di memoria più veloci e di un’interfaccia più rapida con la CPU. Inoltre, potete ottimizzare le strutture di dati utilizzate dai database in-memory per un recupero più rapido.

I database in-memory possono velocizzare i siti web e le applicazioni quando vengono utilizzati come strato di caching tra il sito web e un database tradizionale. L’accesso alla memoria è più veloce di quello al disco e la riduzione dell’overhead si traduce in tempi di caricamento del sito web più rapidi e può contribuire a migliorare la SEO.

Redis è uno dei database in-memory più popolari e potete aggiungerlo facilmente ai siti WordPress grazie all’add-on di Kinsta. Provate l’add-on Redis per il vostro sito ospitato su Kinsta.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.