Pregunta

Actualmente estoy trabajando en un problema que implica consultar una enorme cantidad de datos (miles de millones de filas) y, como no tengo experiencia con este tipo de cosas, me encantaría recibir algún consejo inteligente.

Los datos/problema se ven así:

  1. Cada tabla tiene de 2 a 5 columnas clave y 1 columna de valor.
  2. Cada fila tiene una combinación única de claves.
  3. Necesito poder realizar consultas mediante cualquier subconjunto de claves (es decir,clave1='bla' y clave4='bloo').
  4. Sería bueno poder insertar rápidamente nuevas filas (actualizando el valor si la fila ya existe), pero estaría satisfecho si pudiera hacerlo lentamente.

Actualmente tengo esto implementado en MySQL ejecutándose en una sola máquina con índices separados definidos en cada clave, un índice para todas las claves (único) y un índice que combina la primera y la última clave (que es actualmente la consulta más común que estoy haciendo). pero eso podría cambiar fácilmente).Desafortunadamente, esto es bastante lento (y los índices terminan ocupando ~10 veces el espacio en disco, lo cual no es un gran problema).

Resulta que tengo un grupo de computadoras rápidas a mi disposición (~40), lo que hace que la increíble lentitud de esta base de datos de una sola máquina sea aún más molesta.Quiero aprovechar todo este poder para hacer que esta base de datos sea rápida.He considerado crear una tabla hash distribuida, pero eso dificultaría consultar solo un subconjunto de claves.Parece que algo como BigTable/HBase sería una solución decente, pero todavía no estoy convencido de que no exista una solución más sencilla.

¡Muchas gracias, cualquier ayuda sería muy apreciada!

No hay solución correcta

Otros consejos

Le sugiero que escuche este podcast para obtener información excelente sobre bases de datos distribuidas.episodio-109-principios-de-arquitectura-de-ebays-con-randy-shoup

Para señalar lo obvio:. Usted está probablemente ligado disco

En algún momento, si está haciendo consultas randomish y su conjunto de trabajo es suficientemente mayor que la RAM, entonces estará limitado por el pequeño número de IOPS aleatorias un disco puede hacer. No vas a ser capaz de hacerlo mejor que unas pocas decenas de sub-consultas por segundo por disco conectado.

Si usted está en contra de que cuello de botella, es posible ganar más por el cambio a un SSD, un RAID más grande, o una gran cantidad de RAM que lo haría mediante la distribución de la base de datos entre muchos ordenadores (lo que en su mayoría sólo obtener más de los dos últimos recursos)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top