2010-06-30 19 views
19

Non credo sia ancora chiaro per me, è più veloce leggere le cose da un file o da memcached? Perché?Quale è più veloce/migliore per la memorizzazione nella cache, il file system o Memcached?

+0

È necessario ottenere informazioni più specifiche, quali sono set di dati e access patterens, si tratta di un server locale memorizzato o distribuito? qual è il costo di accesso alla rete? quanto è grande l'informazione che stai memorizzando? quali dischi stai correndo? –

+0

Domande come queste sono più adatte per http://superuser.com/ –

+0

Non so molto sui dettagli, credo nei termini di base: semplice configurazione, semplice app, 1 server memcache, 100 file ... –

risposta

23

Memcached è più veloce, ma la memoria è limitata. L'HDD è enorme, ma l'I/O è lento rispetto alla memoria. È necessario mettere le cose più calde per memcached e tutti gli altri può andare per memorizzare i file di cache.
(O l'uomo e investire dei soldi in più memoria come these guys :)

Per alcuni parametri di riferimento si veda: Cache Performance Comparison (File, Memcached, Query Cache, APC)

In teoria:

Read 1 MB sequentially from memory       250,000 ns 
Disk seek        10,000,000 ns 

http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf

+5

I benchmark che hai collegato mostrano l'esatto opposto della tua affermazione: che Memcached è più lento della lettura dal disco locale. Potresti chiarire le discrepanze? – DOOManiac

0

Sei in voga nei dettagli. E credo che la risposta che stai cercando dipenda dal situtation. A mia conoscenza, pochissime cose tendono ad essere sempre migliori dell'altra.

Ovviamente non dovrebbe essere più veloce leggere le informazioni del file system (presupponendo che sia un disco rigido). Anche un SDD sarà notevolmente più lento delle letture in memoria. E la ragione è che HDD/FileSystem è costruito per capacità non velocità, mentre la memoria DDR è particolarmente veloce per questo motivo.

Un buon caching consente di mantenere in memoria le parti frequentemente utilizzate e le cose con accesso non frequente sul disco (archiviazione permanente). In questo modo il caso normale sarebbe notevolmente migliorato dall'implementazione della cache. Questo è il tuo obiettivo. Assicurati di avere una buona conoscenza della tua politica di caching ideale. Ciò richiederà un ampio benchmarking e test.

11
Ci

sono un bel alcuni aspetti diversi che potrebbero favorire uno o l'altro:

  • È necessario/desidera condividere questi dati tra più server? Il filesystem è locale, è possibile accedere a memcached tramite una rete.
  • Quanto sono grandi gli elementi della cache? Il filesystem è probabilmente migliore per oggetti di grandi dimensioni.
  • Quante richieste memcached potrebbero esserci per pagina? Le connessioni TCP e le operazioni di rimozione potrebbero richiedere più tempo di un semplice file system() sul computer locale.

Ti suggerisco di guardare il tuo caso d'uso e fare un po 'di profilazione di entrambi gli approcci. Se riesci a farla franca con il filesystem, lo farei. L'aggiunta di memcached aggiunge un altro livello di complessità e potenziali punti di errore (client/server memcached).

Per quello che vale, gli altri commenti sulle prestazioni della memoria su disco e su disco potrebbero essere accademici come se i dati del filesystem fossero accessibili regolarmente, quindi probabilmente sarà seduto in OS o nella memoria cache del disco.

0

Dipende se la cache è memorizzata localmente. Memcache è in grado di memorizzare i dati su una rete, che non è necessariamente più veloce di un disco locale.

0

In effetti, non è così semplice come la lettura dalla memoria è molto più veloce della lettura da HDD.Come sapete, Memcached si basa sulla connessione TCP, se si effettua la connessione ogni volta che si desidera ottenere sth o impostare sth su server memcached (vale a dire la maggior parte dei programmatori), funziona in modo non corretto rispetto all'utilizzo della cache dei file. Dovresti usare l'oggetto Memcached statico e riutilizzare l'oggetto. In secondo luogo, i sistemi operativi moderni memorizzeranno nella cache i file che vengono utilizzati di frequente, il che rende le cache dei file più veloci dei memcach che sono connessioni TCP effettive.

2

"Più veloce" non può essere utilizzato senza contesto. Ad esempio, l'accesso ai dati in memcached sul server remoto può essere "più lento" a causa della latenza della rete. D'altra parte, la lettura dei dati dalla memoria del server remoto tramite la rete 10Gb può essere "più veloce" rispetto alla lettura degli stessi dati dal disco locale.

La differenza principale tra la memorizzazione nella cache sul file system e l'utilizzo di memcached è che memcached è una soluzione di caching completa. Quindi ci sono liste LRU, concetto di scadenza (freschezza dei dati), alcune operazioni di alto livello, come cas/inc/dec/append/prepend/replace.

Memcached è facile da implementare e monitorare (come possiamo distinguere le "cache" carico di lavoro su un file system da, diciamo kernel? Possiamo calcolare quantità totale di dati memorizzati nella cache? Dati distribuzione? Pianificazione delle capacità? E così via).

ci sono anche alcuni sistemi ibridi, come cachelot In sostanza, si tratta di memcached che può essere integrato direttamente in applicazione, in modo dalla cache sarà accessibile senza chiamate di sistema o della rete IO.

Problemi correlati