2011-05-20 9 views
20

Actualmente estoy migrando algunos datos a Redis y estoy considerando usar un conjunto ordenado para almacenar aproximadamente 1.4e6 elementos (con puntajes/recuentos asociados). ¿Es probable que esta cantidad de elementos en un conjunto exceda un límite práctico, por lo que es demasiado doloroso usar el conjunto? Planeo ejecutar redis de 64 bits, por lo que la memoria disponible para los datos no debería ser un problema. ¿Alguien tiene experiencia con un conjunto ordenado de este tamaño? Si es así, ¿cómo son sus tiempos de inserción y consulta para el conjunto?¿Existe un límite práctico para la cantidad de elementos en un conjunto ordenado en redis?

Respuesta

18

Depende de lo que quiera hacer con el conjunto. Las operaciones simples son en su mayoría O (log n) lo que significa que solo requieren el doble de tiempo para un millón de elementos establecidos que para un conjunto de mil elementos. A menos que tengas algo gravemente roto en tu configuración como un límite de memoria más pequeño que el configurado, el rendimiento no debería ser un problema.

Donde debe tener cuidado es con las operaciones en varios conjuntos, en particular la unión, que llevará mil veces más tiempo para el conjunto de millones de elementos. Sin embargo, en términos prácticos esto no es necesariamente un problema: o bien será lo suficientemente rápido para sus propósitos (Redis tiene comandos documentados como demasiado lentos para el uso de producción que aún se miden mejor en milisegundos) o puede ajustar el orden de las operaciones a evite ejecutar la unión en conjuntos realmente grandes.

10

Nuestro sitio tiene un conjunto ordenado con alrededor de 2 millones de elementos (direcciones de correo electrónico) con puntuaciones enteras y ocupaba aproximadamente 320 MB en tamaño de memoria.

+0

Sí, tenemos alrededor de 1 M int => int pares y no sé exactamente cuánto espacio está usando, pero debería ser de alrededor de 100mb/200mb .. – Juan

Cuestiones relacionadas