2011-09-17 2 views
5

Mysql ha motori di dati basati sulla memoria, il che significa che mantiene i dati nella RAM.Il database basato su memoria può sostituire la necessità di memorizzare la cache?

Ci sono due tipi di motore di archiviazione di memoria in MySQL per quanto ne so che la memoria l'uso,

Uno è il motore della memoria stessa La funzione non molto cool di questo motore di memorizzazione è che crea solo le tabelle virtuali che significa se il server viene riavviato i dati vengono persi

L'altro è il motore di archiviazione Cluster Questo non ha lo svantaggio del motore precedente, utilizza la memoria ma mantiene anche un record di dati basato su file.

Ora la domanda è se il database sta già utilizzando la RAM per archiviare ed elaborare i dati, è necessario aggiungere un altro motore di memorizzazione nella cache come Memcached per aumentare le prestazioni del prodotto?

Quanto è veloce un database di memoria con memoria rispetto a Memcached?

Memcache aggiunge funzionalità ai propri prodotti che un database con memoria non ha?

Il database con memoria plus engined offre più funzionalità come la possibilità di richiedere query, rispetto a Memcached che consente di ottenere solo dati grezzi, quindi Memcached è un po 'come un motore di database che supporta solo il comando SELECT.

Mi manca qualcosa?

risposta

1

Un database (relazionale) e il servizio di memorizzazione nella cache sono complementari. Come sottolineato, hanno diversi obiettivi di progettazione e casi d'uso. (Eppure trovo il vantaggio nucleo di un database mancante nel post.)

Memcached (e altre cache) offrono alcuni vantaggi che non possono essere realizzati in un modello ACID database. Questo è un trade-off, ma tali cache sono progettate per la massima distribuzione e la minima latenza. Memcached è non un database: si tratta di un archivio di valori chiave distribuiti con alcune politiche di sfratto.Poiché si tratta semplicemente di un archivio di valori-chiave, può "saltare" molti passaggi nella query sui dati del database - al costo di supportare solo direttamente le operazioni 1-1. Nessun join, nessuna relazione, un singolo risultato, ecc.

Ricorda, una cache è proprio questo: una cache. Non è un archivio di informazioni affidabile né offre l'integrità/coerenza dei dati trovata in un database (relazionale). Anche i sistemi di cache che possono "persistere" i dati non hanno necessariamente garanzie ACID (diamine, anche MyISAM non è completamente ACID!). Alcuni sistemi di cache offrono garanzie di sincronizzazione/coerenza molto più forti; memcached non è un sistema del genere.

La linea di fondo è, a causa del design e modello semplice di memcache, è vincita in latenza e distribuzione nel dominio su cui opera. Quanto? Beh, questo dipende ...

... prima, pick approccio (es) con le richieste caratteristiche e garanzie e quindi punto di riferimento gli approcci per determinare quali uno (s) sono adatti (o "più adatto ") per l'attività. (Potrebbe non essere nemmeno necessario utilizzare una cache o un "database di memoria" o l'approccio migliore potrebbe essere quello di utilizzare un design "No SQL".)

Felice codifica.

4

Dipende da come si utilizza memcached. Se lo si utilizza per memorizzare nella cache una pagina HTML sottoposta a 30 query SQL da compilare, si otterrà un aumento delle prestazioni anche su un database in memoria.

1

Memcached può memorizzare fino a 1 MB di dati. Quello che fa è che sfrutta il db load in modo tale da non collegarsi nemmeno al db per chiederlo per i dati. La maggior parte dei siti Web contiene una piccola quantità di dati che vengono visualizzati all'utente (in termini di dati testuali, non dei file stessi).

Quindi per rispondere - sì, è una buona idea avere Memcached anche perché può aiutarti a non collegarti nemmeno al db, che rimuove alcuni sovraccarichi all'inizio.

D'altra parte, ci sono moltissimi motori disponibili per MySQL. Personalmente, non userei il motore di memoria per molte ragioni, una delle quali è la perdita di dati. InnoDB, il motore MySQL predefinito come di recente rilascio, memorizza già il set di dati di lavoro nella memoria (controllato dalla variabile innodb_buffer_pool) ed è incredibilmente veloce se il set di dati può essere contenuto nella memoria. C'è anche il motore TokuDB che supera InnoDB in termini di ridimensionamento, entrambi migliori del motore di memoria. Tuttavia, è sempre una buona cosa memorizzare nella cache i dati a cui si accede di frequente e raramente modificati.