2010-06-21 21 views
18

Ho letto un sacco di articoli che suggeriscono di mettere un Memcached (o Velocity, ecc.) Di fronte a un database è più efficiente di colpire direttamente il database. Ridurrà il numero di accessi sul database cercando i dati in una cache di memoria, che è più veloce di colpire il database.Memcached vs cache SQL Server

Tuttavia, SQL Server dispone della propria cache di memoria per gli oggetti nel database. Quando i dati vengono recuperati, SQL Server mantiene la cache e (se necessario) preleva la riga dalla memoria e non colpisce il disco.

Quindi, se SQL Server dispone della propria cache, qual è il vantaggio di un server Memcached esterno (o simile)?

La maggior parte degli articoli che ho letto riguardano i siti di social network, che per lo più utilizzano MySql. Tuttavia, un article su MySpace, che utilizza SQL Server, suggerisce che il caching venga utilizzato anche su quel sistema.

Questo article spiega quando è necessario utilizzare la cache e questo article è un contrappunto.

risposta

13

Quindi, se SQL Server dispone della propria cache, qual è il vantaggio di un server Memcached esterno (o simile)?

Sì SQL Server dispone di una propria cache ma memorizza solo:
- Query prevede
- pagine dai file di database

ma non lo fa la cache:
- i risultati di una query

es. si dispone di una query complessa che utilizza alcuni aggregazione su un sacco di dati (si pensi a: quanti paesi diversi che abbiamo nel nostro database clienti: SELECT DISTINCT Paese da clienti del Gruppo per paese)

SQL Server esegue la scansione ° TUTTO tabella dei clienti, ma il tuo set di risultati sarà lungo solo poche voci. Per riassegnare la tua ricerca, SQL Server riutilizzerà il piano di query e sarà ripetere la scansione della tabella dei clienti, (e se siete fortunati le pagine sono ancora in memoria)

Quando si utilizzano memcached è possibile memorizzare le poche righe di il vostro set di risultati e riutilizzarli più e più volte senza connettersi al server del database. Quindi ci vuole un po 'di carico dal tuo server di database.
NOTA: Attenzione ai dati obsoleti, se i dati cambiano sul server SQL !!

+0

Grazie. Non ero a conoscenza che memorizzava l'intero tavolo in memoria. È stato difficile trovare la documentazione su di esso. Hai un link che documenti questo? –

+0

Correzione al mio ultimo commento: mi rendo conto che le pagine sono archiviate nella memoria, non nell'intero tavolo. –

+1

Non è necessario utilizzare DISTINCT su una colonna quando si sta già GROUPING BY dalla stessa colonna. – Kiril

0

La velocità, e così via, è IDEALE soprattutto quando il server SQL vive nella propria casella. Abbiamo utilizzato la cache incorporata di ASP.NET ma speriamo di passare a Velocity. Diversi server Web parlano con un cluster SQL e la memorizzazione nella cache aiuta davvero con la scalabilità e riduce il carico SQL.

4

Un altro vantaggio può anche essere che SQL Server è costoso da scalare mentre aggiungere un nuovo server Web/caching può essere più economico da ottenere.

Usiamo il caching a livello di applicazione per archiviare tutti i tipi di cose, non tutte da un database. È possibile modificare gli oggetti dati nel codice, quindi aggiungere alla cache, ad esempio.

È anche possibile memorizzare il markup, se necessario (cache di output).

In un giorno, utilizzando il caching, abbiamo spostato il nostro sito dall'essere in grado di gestire 150 sessioni simultanee mentre lo stress test a oltre 800. Vi consiglio caldamente di usarlo !!