Perché Redis viene chiamato un database in memoria quando fornisce la persistenza?

2

Mi piacerebbe capire perché è redis chiamato un database in memoria quando fornisce persistenza simile a database come MySQL o Postgres:

link
link

    
posta morpheus 16.10.2017 - 05:56
fonte

1 risposta

7

Redis è un database in memoria perché conserva l'intero set di dati in memoria e risponde a tutte le query dalla memoria. Poiché la RAM è più veloce dei dischi, ciò significa che Redis ha sempre letture molto veloci. Lo svantaggio è che la dimensione massima del set di dati è limitata dalla RAM disponibile.

Redis ha varie opzioni per salvare i dati nella memoria permanente. Questa rappresentazione permanente può quindi essere utilizzata per ricostruire lo stato in memoria di un'istanza Redis. Tuttavia, questa rappresentazione non è indicizzata e non può essere utilizzata per rispondere alle query direttamente dal disco.

Questo è in netto contrasto con database come Postgres. Mantengono sempre l'intero set di dati inclusi gli indici su disco in un formato che consente l'accesso casuale. È possibile rispondere alle query direttamente dai dati su disco. Il database può caricare cache o indici in memoria come ottimizzazione, ma ciò non è fondamentalmente necessario: il database può gestire più dati di quelli contenuti nella RAM.

Una maggiore differenza tra i database Redis e SQL è il modo in cui trattano le scritture, ovvero le garanzie di durabilità che forniscono. Ci sono molti parametri sintonizzabili qui, quindi non è corretto dire "un database SQL è sempre più duraturo di un database Redis". Tuttavia, Redis di solito esegue il commit dei dati sull'archiviazione permanente su base periodica, mentre Postgres di solito esegue il commit prima che ogni transazione sia contrassegnata come completa. Ciò significa che Postgres è più lento perché esegue il commit più frequentemente, ma in genere Redis ha una finestra temporale in cui può verificarsi una perdita di dati anche quando al client viene comunicato che il loro aggiornamento è stato gestito correttamente. Questa perdita di dati può essere o meno un compromesso accettabile in un determinato caso d'uso.

Che tipo di data set si adatta sempre alla RAM, è una buona corrispondenza per un datamodel con valori chiave e non ha bisogno di durabilità? Una cache per un'altra fonte di dati. Redis è molto bravo a essere veloce. I database SQL come Postgres sono più adatti a gestire ampi set di dati e forniscono garanzie ACID .

    
risposta data 16.10.2017 - 08:19
fonte

Leggi altre domande sui tag