Eu tenho um sensor que está gerando um vetor de dados digamos a cada segundo (ajustável para até 100 vetores por segundo) em um local remoto. O local tem modem 4G para enviar os dados. Devido a limitações de energia, optei por usar um Raspberry Pi 3+ para receber os dados do sensor, decodificá-los e enviá-los para o meu servidor VPS.
No meu servidor executando o Ubuntu 18.04, instalei o TimescaleDB em cima do PostgreSQL, que é uma boa combinação para lidar com dados de séries temporais e gostaria de armazenar os dados do sensor lá e publicá-los no meu site. Gostaria de saber sua opinião sobre como seria o fluxo de dados e tenho algumas perguntas.
Qual seria a melhor forma de inserir os dados do sensor do RPi no banco de dados do servidor? É salvar inseri-los diretamente do RPi usando a biblioteca libpq no meu software C ou devo transportar os dados para o servidor de uma maneira diferente e depois inserir os dados no banco de dados no lado do servidor?
No lado do RPi, gostaria de ter um buffer local para evitar a perda de dados se a conexão com o servidor for interrompida. Eu poderia simplesmente usar um buffer circular no meu programa C ou um pipe nomeado, ou eu poderia instalar o PostgreSQL/TimescaleDB localmente, inserir os dados lá e então usar postgres_fdw ou dblink para transferir os dados de lá para o meu banco de dados do servidor e excluir as entradas de meu banco de dados local. O que você sugeriria?
Acho que instalar o Postgres no RPi é um exagero.
O armazenamento em buffer dos dados do sensor em um arquivo de texto simples deve ser bom o suficiente. O processo pode ser algo como:
copy ... from stdin
dentro de uma transação. Se isso falhar (problema de conexão), tente novamente até ser bem-sucedido.Usar
copy .. from stdin
é muito mais eficiente do que executar várias instruções INSERT de linha única. E ainda mais eficiente do que executar uma única instrução INSERT de várias linhas. Além disso, o arquivo também atua como o buffer desejado.