A estrutura dos meus dados é a seguinte:
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
Preciso executar as seguintes consultas:
Primeiro:
- Filtrar dados
date
,filter_a
,filter_b
,filter_c
e outros
Segundo, com os dados filtrados:
- conte todos os registros
- obter média de
variable_a
,variable_b
evariable_c
- obter desvio padrão de
variable_a
,variable_b
evariable_c
- obter quartis de
variable_a
,variable_b
evariable_c
- agrupar dados por
group
ousecond_group
agregados (Contagem, Média, Padrão, ..)
O número de usuários do sistema é cerca de 10 ou 15, mas o número de itens é enorme, agora é 70M mas será 500M em um par de semanas e será 1000M em cerca de um ano.
O número de consultas é pequeno, não mais que 10 usuários simultaneamente, meu problema é como lidar com essas consultas com essa enorme quantidade de dados.
O que eu tentei até agora?
Comecei com
mongodb
, no início, era rápido, mas ficou lento ao calcular quartis com 10M +. Melhorou quando adicionei índices, mas não ajudou muito quando tive que consultar todos os dados. Comecei a usar o mongodb porque os dados eram muito dinâmicos, mas felizmente o formato dos dados "não muda mais".Como
filter_a
efilter_b
poderia ser visto como nós, tenteineo4j
. Eu gostei muito do neo4j, mas meu gráfico tinha muitas arestas para que as consultas não fossem muito rápidas.Finalmente, como o formato dos dados não vai mudar e é apenas uma coleção / tabela, portanto não precisa de junções no SQL, verifiquei o postgresql. Meus testes foram mais rápidos com o postgresql, mas estou com medo de que não possa ser dimensionado adequadamente no futuro.
O que eu preciso?
- O postgresql é uma boa escolha para este caso?
- Existe outro tipo de banco de dados que eu poderia usar? qual é o melhor para este caso?
- O que mais eu poderia fazer para melhorar isso?
Editar
- Cerca de 1 milhão de elementos são inseridos todos os dias e "não devem mudar" ao longo do tempo.
- Velocidade de gravação não é importante
- O requisito difícil é ler / agregar rapidamente
Obrigado!