2010-01-10 15 views

Respuesta

10

creo que me gustaría ir con Redis, porque:

  • Antirediz (su apodo) que realmente está desarrollando activamente Redis. (Cada vez que miro mi tablero Github, él ha confirmado un nuevo código). Ahora está desarrollando redis fulltime gracias a VMware
  • Redis es finalmente persistente por lo que el rendimiento es kickass (primero solo utiliza la memoria que es rápida).
  • Redis tiene una operación atómica increment que necesita.
  • Redis tiene muchas bibliotecas de PHP. También hay uno que está escrito como C extension por lo que tiene un muy buen rendimiento. Redis website también tiene una descripción de estas extensiones. Algunos son códigos PHP puros (se ejecutan un poco pero son más lentos, pero son más fáciles de configurar).
+0

sin duda diría redis. Estoy haciendo un contra tipo de cosas y estoy presionando 30k comandos por minuto en un VPS de $ 512MB. :) –

+0

Intentamos usar redis para un sistema de contadores. El almacén de datos primario de Redis es RAM, y nuestro conjunto de datos era demasiado grande para que sea efectivo.Algo más parecido a Tokyo Tyrant, que no tiene que mantener todo el conjunto de datos en ram todo el tiempo, probablemente habría sido una mejor opción. –

+0

¿No se puede mantener un contador simple en la memoria RAM? Twitter almacena casi todos los tweets activos en la memoria. Si quieres rendimiento, creo que deberías pagar un poco de efectivo por un módulo de memoria. Al lado de usted puede obtener un par de conciertos de ram barato. – Alfred

1

Los famosos contadores de vista de la década de 1990 usaron archivos simples para almacenar el número. Si todo lo que necesitas es solo almacenar un número, cualquier cosa es lo suficientemente buena.

+2

Si obtiene algún tipo de tráfico significativo, escribir en un archivo en disco tiene problemas de concurrencia. A menos que use el bloqueo de archivos, pero luego corre el riesgo de contención de bloqueo. Los proyectos como memcached existen por una razón. –

+2

Pero si solo lo está utilizando para un sitio simple (poco tráfico) esto podría funcionar y será fácil de implementar – Alfred

+0

La contención de bloqueo no es tan difícil. 'while (! get_lock() || count> 10000) {sleep (0.001); count ++}; fread() o fwrite(); remove_lock(); 'Algo así como simple puede manejar fácilmente cientos de miles de solicitudes por segundo ... suponiendo que el sistema operativo elegido es rápido en las operaciones del sistema de archivos. –

-1

Diría que APC o memcached son buenas opciones.

+1

Sin persistencia? – stesch

+0

+1. Redis también es comparable y ha construido persistencia. –

9

MongoDB con upserts es ideal para esto.

Si usted está almacenando algo como:

{ "url" : "www.example.com", "pageviews" : 0 } 

puedes páginas vistas atómicamente incremento muy rápidamente con la operación atómica $ inc:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}) 

Si utiliza upserts, usted no tiene para verificar si existe un documento antes de actualizarlo. Por ejemplo, si usted dice:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}, {"upsert" : true}) 

el documento con la URL www.example.com se creará si no existe (con páginas vistas puestos a 1) o, si existe, páginas vistas serán incrementado Esto significa que no tiene que preocuparse por rellenar previamente la colección.

Cuestiones relacionadas