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

Responder a