El escenario es bastante simple, hay aproximadamente 100M de registros en una tabla con 10 columnas (tipo de datos analíticos), y necesito poder realizar consultas en cualquier combinación de esas 10 columnas. Por ejemplo, algo como esto:¿Cuál es una buena forma de estructurar una tabla de registros de 100M para consultas rápidas ad-hoc?
- ¿Cuántos registros con
a = 3 && b > 100
hay en los últimos 3 meses?
Básicamente todas las consultas van a ser una especie de el número de registros con atributos X
hay en intervalo de tiempo Y
, donde X
puede ser cualquier combinación de las 10 columnas.
Los datos seguirán llegando, no es solo un conjunto predeterminado de registros de 100M, sino que está creciendo con el tiempo.
Dado que la selección de columna puede ser completamente aleatoria, la creación de índices para combinaciones populares probablemente no sea posible.
La pregunta tiene dos partes:
- ¿Cómo debo estructurar esto en una base de datos SQL para realizar las consultas lo más rápido posible, y cuáles son algunos pasos generales que pueda tomar para mejorar el rendimiento?
- ¿Hay algún tipo de base de datos NoSQL que esté optimizado para este tipo de búsqueda? Solo puedo pensar en ElasticSearch, pero no creo que funcione muy bien en este gran conjunto de datos.
Parece que puede necesitar una base de datos [OLAP] (http://en.wikipedia.org/wiki/Online_analytical_processing). – Sirko
¿De qué rendimiento estás hablando? ¿Milisegundo? ¿Segundo? Decenas de segundos? ¿Esperas tener varias solicitudes de este tipo al mismo tiempo? –