2010-06-30 7 views
19

No creo que todavía esté claro, ¿es más rápido leer cosas de un archivo o de memcached? ¿Por qué?¿Qué es más rápido/mejor para almacenar en caché, File System o Memcached?

+0

Tendrá que ser más específico, ¿cuáles son sus conjuntos de datos y patterens de acceso, se trata de un servidor de memchaced local o distribuido? ¿Cuál es el costo de acceso a la red? ¿Qué tan grande es la información que está almacenando? ¿Qué discos estás ejecutando? –

+0

Preguntas como estas son más adecuadas para http://superuser.com/ –

+0

No sé mucho sobre los detalles, supongo que en términos básicos: configuración simple, aplicación simple, 1 servidor de memcache, 100 archivos ... –

Respuesta

23

Memcached es más rápido, pero la memoria es limitada. La unidad de disco duro es enorme, pero la E/S es lenta en comparación con la memoria. Debería poner las cosas más populares en memcached, y todas las demás pueden ir a para almacenar en caché los archivos.
(o el hombre e invertir algo de dinero en más memoria como these guys :)

Para ver algunos puntos de referencia: Cache Performance Comparison (File, Memcached, Query Cache, APC)

En teoría:

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

Los puntos de referencia que vinculó muestran exactamente lo contrario de su afirmación: que Memcached es más lento que leer desde el disco local. ¿Podrías aclarar las discrepancias? – DOOManiac

0

Estás siendo muy útil en los detalles. Y creo que la respuesta que buscas depende de la situación. Que yo sepa, muy pocas cosas tienden a ser mejores que las demás todo el tiempo.

Obviamente no sería más rápido leer cosas del sistema de archivos (suponiendo que es un disco duro). Incluso un SDD será notoriamente más lento que las lecturas en la memoria. Y la razón es que HDD/FileSystem está diseñado para la capacidad, no para la velocidad, mientras que la memoria DDR es particularmente rápida por esa razón.

Un buen almacenamiento en caché significa mantener en la memoria las partes a las que se accede con frecuencia y las cosas a las que no se accede con frecuencia en el disco (almacenamiento persistente). De esa manera, la implementación normal de la caché mejoraría enormemente el caso normal. Ese es tu objetivo. Asegúrese de tener una buena comprensión de su política de almacenamiento en caché ideal. Eso requerirá extensas evaluaciones comparativas y pruebas.

11

hay un buen algunos aspectos diferentes que pueden favorecer a uno u otro:

  • ¿Necesita/quiere compartir esta información entre varios servidores? El sistema de archivos es local, a memcached se accede a través de una red.
  • ¿Qué tan grande son los elementos de su almacenamiento en caché? Es probable que el sistema de archivos sea mejor para objetos grandes.
  • ¿Cuántas solicitudes de memcached pueden estar allí por página? Las conexiones TCP y los arrancadores pueden tomar más tiempo que un simple sistema de archivos stat() en la máquina local.

Le sugiero que mire su caso de uso y que haga un perfil de ambos enfoques. Si puedes salirte con la tuya usando el sistema de archivos entonces lo haría. Agregar en memcached agrega en otra capa de complejidad y posibles puntos de falla (memcached cliente/servidor).

Por lo que vale la pena, los otros comentarios sobre el rendimiento del disco frente a la memoria pueden ser académicos, como si los datos del sistema de archivos estuvieran siendo accedidos con regularidad, de todos modos es probable que estén almacenados en el sistema operativo o en el disco.

0

Depende si la memoria caché se almacena localmente. Memcache puede almacenar datos en una red, que no es necesariamente más rápida que un disco local.

0

De hecho, no es tan simple como que leer desde la memoria es mucho más rápido que leer desde la unidad de disco duro.Como sabías, Memcached se basa en la conexión tcp, si haces conexión cada vez que quieres obtener algo o establecer algo en el servidor memcached (eso es lo que hacen la mayoría de los programadores), tiene un rendimiento pobremente que usar la caché de archivos. Debería usar un objeto Memcached estático y reutilizar el objeto. En segundo lugar, los sistemas operativos modernos almacenarán en caché los archivos que se usan con frecuencia, lo que hace que los cachés de archivos sean más rápidos que los memcaches que en realidad son conexiones TCP.

2

"Más rápido" no se puede utilizar sin contexto. Por ejemplo, el acceso a los datos en memcached en el servidor remoto puede ser "más lento" debido a la latencia de la red. Por otro lado, leer datos de la memoria del servidor remoto a través de una red de 10 Gb puede ser "más rápido" que leer los mismos datos del disco local.

La principal diferencia entre el almacenamiento en caché en el sistema de archivos y el uso de memcached es que Memcached es una solución completa de almacenamiento en caché. Entonces, hay listas de LRU, concepto de caducidad (frescura de los datos), algunas operaciones de alto nivel, como cas/inc/dec/append/prepend/replace.

Memcached es fácil de implementar y monitorear (¿cómo podemos distinguir la carga de trabajo de "caché" en sistemas de archivos, digamos kernel? ¿Podemos calcular la cantidad total de datos en caché? ¿Distribución de datos? ¿Planificación de capacidad?

Hay también algunos sistemas híbridos, como cachelot Básicamente, es memcached que puede ser incrustado directamente en la aplicación, por lo que el caché sería accesible sin ningún tipo de llamadas al sistema o red de IO.

Cuestiones relacionadas