Este número não é tão alto quanto você pensa. No trabalho atual, armazenamos dados de métricas para sites e a quantidade total de linhas que temos é muito maior. E no trabalho anterior eu trabalhei com o banco de dados pg que coletava métricas da rede móvel e coletava ~ 2 bilhões de registros por dia. Portanto, não tenha medo de bilhões em número de registros.
Você definitivamente precisará particionar dados - provavelmente por dia. Com essa quantidade de dados, você pode encontrar índices bastante inúteis. Depende dos aviões que você verá em
EXPLAIN
saída do comando. Por exemplo, esse aplicativo de telecomunicações não usou nenhum índice porque apenas desaceleraria todo o mecanismo. Outra questão é a rapidez com que você precisará de respostas para as consultas. E quais etapas na granularidade (somas ao longo de horas/dias/semanas, etc.) para consultas você permitirá aos usuários. Você pode até precisar fazer algumas agregações para granularidades como semana, mês ou trimestre.
Adição:
Esses ~ 2 bilhões de registros por dia nesse aplicativo de telecomunicações levaram ~ 290 GB por dia. E isso significava inserções de ~ 23.000 registros por segundo usando inserções em massa com o comando COPY. Cada volume era de vários milhares de registros. Os dados brutos foram particionados por minutos. Para evitar esperas de disco, o db tinha 4 tablespaces em 4 discos/arrays diferentes e partições foram distribuídas sobre eles. O PostreSQL foi capaz de lidar com tudo isso sem problemas. Portanto, você também deve pensar na configuração adequada de HW.
Uma boa idéia também é mover o diretório pg_xlog para separar o disco ou array. Não apenas um sistema de arquivos diferente. Tudo deve ser HW separado. SSDs que posso recomendar apenas em matrizes com verificação de erros adequada. Ultimamente, tivemos problemas com banco de dados corrompido em um único SSD.