2011-07-07 13 views
35

¿Por qué Redis usa números de base de datos enteros en lugar de cadenas? Parece que sería trivial mantener una pequeña estructura de datos interna que asigna cadenas al entero "real".¿Por qué Redis usa números de base de datos enteros?

+0

Mejor pregunte en la lista de desarrolladores redis. – bmargulies

+1

Si no puedo obtener una respuesta aquí, ese será mi próximo paso ... Pero trato de evitar las listas de correo siempre que sea posible: P –

+3

Personas que votaron para cerrar: ¿podrían dejar un comentario explicando por qué? No * creo * que esta pregunta "probablemente solicite opinión, debate, argumentos, encuestas o discusiones extensas" y sé que Redis no es * tan * popular, pero no creo que las preguntas sobre él califiquen como " extraordinariamente estrecho "tampoco. –

Respuesta

40

la razón por la que Redis no utiliza cadenas como nombres de bases de datos sino índices es que el objetivo y la capacidad de las bases de datos Redis no es proporcionar un nivel externo de diccionario: los diccionarios Redis no pueden escalar a muchos diccionarios, sino a número pequeño (es una compensación), ni queremos proporcionar estructuras de datos anidados por diseño, por lo que estos son solo "unos pocos espacios de nombres" y, como resultado, utilizar un pequeño índice numérico parecía ser la mejor opción.

+5

¿Hay alguna razón por la cual este sea un mejor enfoque que tratar un nombre de base de datos como un prefijo de cadena de espacios de nombres? – shazow

4

Tener bases de datos con nombre no se ajusta realmente a los objetivos de diseño de redis. Para empezar, en un sistema diseñado para un rendimiento máximo, agregar una búsqueda de cadena a cada llamada no es una gran idea cuando la mayoría de los usuarios ponen todo en DB 0 de todos modos.

Otro de los objetivos de diseño es mantener el núcleo simple: si se puede implementar un nuevo comando solicitado combinando los comandos existentes en el cliente sin una gran penalización de rendimiento, no se agregará al sistema central. Si realmente necesita bases de datos con nombre, es trivial actualizar su código de cliente leer una cadena y enviar un número a redis.

+1

"agregar una búsqueda de cadena para cada llamada" - corrígeme si me equivoco, pero solo necesitaría hacer una búsqueda para cada llamada 'SELECT' (es decir, para asignar el nombre simbólico al entero), ¿no? –

+1

Es cierto, aunque eso puede ser casi equivalente dependiendo de cómo use bases de datos y conexiones. –

Cuestiones relacionadas