Em 12 de maio de 2015 16:45, Fernando Foster <[email protected]> escreveu: > Olá pessoal, boa tarde. > > Sou iniciante no PostgreSQL (usamos faz 1 ano e meio) e estou com algumas > duvidas. > Tenho um projeto usando PostgreSQL onde faço estudos de vendas de lojas. > Este servidor é uma instancia RDS da Amazon, pela questão de custos estamos > mudando para o EC2. Como atendo cliente de vários tamanhos diferentes recebo > mensalmente cargas de arquivos txt e xml com os dados das vendas, e em > alguns caso o volume de informação é tão grande que ultrapassa 50.000 linhas > por loja.
Em relação ao PostgreSQL esta quantidade é pequena. > O numero de clientes que me envia informação chega próximo a 500, > porém existe um plano para 1200 lojas em alguns meses. 50.000 x 1.200 = 600.000/mês -- Ainda é pouco para o PostgreSQL. > Existe também um > plano de trabalhar com informações mais detalhadas aumentando o tamanho em > 20 vezes. Mesmo assim o postgres dá conta tranquilamente. > A primeira questão, qual o jeito mais prático de fazer esses inserts? > * Hoje fazemos o envio por uma espécie de streaming enviando "pacotes" de > mil em mil linhas para nossa base. Hoje você manda os inserts diretamente de uma máquina em algum ponto do planeta para o servidor na nuvem, é isto? Uma estratégia melhor é compactar o arquivo e enviá-lo ao servidor, e lá descompactá-lo e realizar a inserção de dados através do comando COPY [1] (como não foi informada a versão, citei a última: 9.4). Da forma atual você está consumindo banda desnecessariamente. > A segunda questão, além de receber os dados, fazemos cruzamentos e > manipulações e por fim geramos dados consolidados, que transformam essas > 50.000 linhas em 200 linhas. Utilizar um servidor local para fazer esse > processo seria uma boa jogada? Como fazer esse envio de dados para a base > sem afetar a experiencia do cliente que está fazendo leitura desses dados? Com certeza, se você pode mandar 200 ao invés de 50.000 é uma boa estratégia (menor o tamanho de transferência). Considere mesmo assim enviar o arquivo compactado para o servidor e descompactá-lo lá dentro. Eu não sei como funciona o seu banco de dados na nuvem (nunca usei RDS ou EC2) mas se você possui acesso a alguma parte do storage via webservice ou SSH a melhor alternativa é tratar o insert localmente na nuvem. Caso não tenha esta possibilidade, dependendo das restrições de segurança do PostgreSQL talvez seja possível criar uma função no banco que receba este arquivo compactado e faça os tratamentos necessários utilizando alguma outra linguagem (plpython, por exemplo). O pessoal mais experiente da lista poderá dizer se é possível ou não (eu já vi algo parecido mas não tenho fontes para citar, então dependo da ajuda dos mestres desta lista). [1] http://www.postgresql.org/docs/9.4/static/sql-copy.html TIAGO J. ADAMI http://www.adamiworks.com @tiadami _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
