Memorizzazione nella cache del database - Database caching

La memorizzazione nella cache del database è un processo incluso nella progettazione di applicazioni informatiche che generano pagine Web su richiesta (dinamicamente) accedendo ai database di backend.

Quando queste applicazioni vengono distribuite su ambienti multilivello che coinvolgono client basati su browser, server di applicazioni Web e database back-end, viene utilizzata la memorizzazione nella cache del database di livello intermedio per ottenere scalabilità e prestazioni elevate.

In un'architettura a tre livelli , il livello del software applicativo e il livello di archiviazione dati possono trovarsi in host diversi. Il throughput di un'applicazione può essere limitato dalla velocità della rete . Questa limitazione può essere ridotta al minimo disponendo del database a livello di applicazione. Poiché il software di database commerciale fa un uso estensivo delle risorse di sistema, non è sempre pratico avere l'applicazione e il database nello stesso host. In questo caso, è possibile utilizzare un'applicazione di database più leggera per memorizzare nella cache i dati dal sistema di gestione del database commerciale .

Benefici

La memorizzazione nella cache del database migliora la scalabilità distribuendo il carico di lavoro delle query dal back-end a più sistemi front-end economici. Consente flessibilità nel trattamento dei dati; ad esempio, i dati dei clienti Platinum possono essere memorizzati nella cache mentre quelli dei clienti ordinari non lo sono. La memorizzazione nella cache può migliorare la disponibilità dei dati, fornendo un servizio continuo per le applicazioni che dipendono solo dalle tabelle memorizzate nella cache anche se il server back-end non è disponibile. Un altro vantaggio è il miglioramento della velocità di accesso ai dati determinato dalla località dei dati e l'appianamento dei picchi di carico evitando round trip tra il livello intermedio e il livello dati.

Potenziali elementi di design

  • Tabelle cache aggiornabili: molti sistemi cache sono di sola lettura, il che limita il loro utilizzo a un piccolo segmento delle applicazioni, applicazioni non in tempo reale.
  • Aggiornamenti bidirezionali: per le cache aggiornabili, gli aggiornamenti, che avvengono nella cache, dovrebbero essere propagati al database di destinazione e tutti gli aggiornamenti che avvengono direttamente sul database di destinazione dovrebbero venire automaticamente nella cache.
  • Propagazione degli aggiornamenti sincrona e asincrona: gli aggiornamenti sulla tabella cache devono essere propagati al database di destinazione in due modalità. La modalità sincrona garantisce che, dopo il completamento dell'operazione sul database, gli aggiornamenti vengano applicati anche al database di destinazione. In caso di modalità asincrona, gli aggiornamenti vengono ritardati al database di destinazione. La modalità sincrona offre un'elevata coerenza della cache ed è adatta per applicazioni in tempo reale. La modalità asincrona offre un throughput elevato ed è adatta per applicazioni quasi in tempo reale.
  • Granularità cache multipla: livello di database, livello di tabella e caching del set di risultati: le parti principali dei database aziendali sono cronologiche e ad accesso raro. Tuttavia, ci sono alcune informazioni che dovrebbero essere immediatamente accessibili come i dati del cliente premium, ecc.
  • Ripristino per tabelle memorizzate nella cache: in caso di interruzione del sistema o di alimentazione, durante il riavvio della piattaforma di memorizzazione nella cache devono essere ripristinate tutte le transazioni salvate nelle tabelle memorizzate nella cache.
  • Strumenti per convalidare la coerenza della cache: in caso di modalità asincrona di propagazione degli aggiornamenti, la cache in diversi nodi della cache e database di destinazione potrebbe divergere. Questo problema deve essere risolto manualmente, individuando le mancate corrispondenze e adottando misure correttive se necessario.
  • Scalabilità orizzontale: il cluster computing può aumentare la disponibilità e ottenere il bilanciamento del carico. La memorizzazione nella cache in un ambiente cluster si estende su più nodi, mantenendo i dati memorizzati nella cache coerenti tra i nodi.
  • L'accesso trasparente alle tabelle non memorizzate nella cache risiede nel database di destinazione: la cache del database dovrebbe tenere traccia delle query e dovrebbe essere in grado di instradare in modo intelligente alla cache del database o al database di origine in base alla località dei dati senza alcuna modifica del codice dell'applicazione .
  • Fail over trasparente: non dovrebbero verificarsi interruzioni del servizio in caso di errore della piattaforma di memorizzazione nella cache. Le connessioni client devono essere instradate al database di destinazione.
  • Nessuna o pochissime modifiche all'applicazione: supporto per interfacce standard JDBC, ODBC ecc. Che consentiranno all'applicazione di funzionare perfettamente senza modifiche al codice dell'applicazione. Dovrebbe instradare tutte le chiamate di stored procedure al database di destinazione in modo che non sia necessario migrarle.

Prodotti

  • Couchbase - https://www.couchbase.com/caching
  • Redis : sistema di database in memoria distribuito, che supporta anche vari scenari di memorizzazione nella cache distribuita
  • GigaSpaces - InsightEdge SmartCache
  • Cache CSQL : per memorizzare nella cache le tabelle di MySQL, Postgres e Oracle.
  • memcached - Per memorizzare nella cache il set di risultati delle query
  • Caching di Windows Azure : per memorizzare nella cache il set di risultati delle query in Windows Azure
  • TimesTen - Per memorizzare nella cache le tabelle ORACLE
  • SafePeak : memorizzazione nella cache automatizzata di set di risultati di query e procedure da SQL Server, con rimozione automatica della cache per la massima correttezza dei dati
  • Apache Ignite
  • Sistemi GridGain
  • Tarantool - DB cache in memoria open-source con application server Lua completo
  • Heimdall Data : motore di memorizzazione nella cache SQL commerciale per Postgres, SQL Server, MySQL e qualsiasi origine dati JDBC, con rimozione automatica della cache e molte altre funzionalità

Riferimenti

link esterno