La estructura de mis datos es la siguiente:
date: <timestamp>
filter_a: <integer> -> range [0, 1000]
filter_b: <integer> -> range [0, 1000]
filter_c: <integer> -> range [0, 86400]
filter_d: <integer> -> range [0, 6]
group: <string>
second_group: <integer>
variable_a: <float>
variable_b: <float>
variable_c: <float>
a couple more no very important
Necesito realizar las siguientes consultas:
Primero:
- Filtrar los datos por
date
,filter_a
,filter_b
,filter_c
y otros
En segundo lugar, con los datos filtrados:
- contar todos los registros
- obtener un promedio de
variable_a
,variable_b
yvariable_c
- obtener la desviación estándar de
variable_a
,variable_b
yvariable_c
- obtener cuartiles de
variable_a
,variable_b
yvariable_c
- agrupar datos por
group
osecond_group
y agregado (Count, Avg, Std, ..)
El número de usuarios del sistema es de aproximadamente 10 o 15, pero el número de artículos es enorme, en este momento es de 70 millones, pero será de 500 millones en un par de semanas y será de 1000 millones en aproximadamente un año.
El número de consultas es pequeño, no más de 10 usuarios al mismo tiempo, mi problema es cómo manejar esas consultas con esta gran cantidad de datos.
¿Qué he probado hasta ahora?
Comencé con
mongodb
, al principio fue rápido pero se hizo lento al calcular cuartiles con 10M +. Mejoró cuando agregué índices, pero no ayudó mucho cuando tuve que consultar todos los datos. Empecé a usar mongodb porque los datos eran muy dinámicos, pero afortunadamente el formato de datos "ya no va a cambiar".Como
filter_a
yfilter_b
podría verse como nodos, lo intenténeo4j
. Me gustó mucho neo4j, pero mi gráfico tenía MUCHOS bordes, por lo que las consultas no fueron muy rápidas.Finalmente, dado que el formato de datos no va a cambiar y es solo una colección / tabla, por lo que no necesita combinaciones en SQL, verifiqué postgresql. Mis pruebas han sido más rápidas con postgresql, pero tengo miedo de que no pueda escalar correctamente en el futuro.
¿Qué necesito?
- ¿Postgresql es una buena opción para este caso?
- ¿Hay otro tipo de base de datos que pueda usar? ¿Cuál es el mejor para este caso?
- ¿Qué más podría hacer para mejorarlo?
Editar
- Alrededor de 1 millón de elementos se insertan todos los días y "no deberían cambiar" a lo largo del tiempo.
- La velocidad de escritura no es importante.
- El requisito difícil es leer / agregar rápidamente
¡Gracias!