Eu preciso armazenar arquivos de dados binários em um banco de dados PostgreSQL que roda em um servidor Ubuntu. Inicialmente haverá algumas dezenas de arquivos de aproximadamente 250kb de tamanho cada. No entanto, o número de arquivos aumentará com o tempo. Às vezes, posso precisar extrair dados dos arquivos para outras análises posteriores.
Eu fiz algumas pesquisas sobre a velha questão de armazenar dados binários como BLOBs ou referências. Ambos obviamente têm seus prós e contras. Há algum problema específico relacionado ao PostgreSQL que eu deva conhecer? Um método ou outro é preferível se eu quiser extrair dados dos arquivos, seja por meio de uma função PostgreSQL ou por meio de um programa Python externo?
Se eu fosse armazenar os arquivos de dados diretamente no banco de dados, seria melhor armazená-los em uma tabela separada com uma chave estrangeira referenciando a tabela "principal", em vez de na tabela contendo todos os outros campos?
Eu li a pergunta e as respostas aqui ; um comentário sugere que armazenar arquivos binários por referência (no sistema de arquivos) no Linux é melhor. Minhas dúvidas aqui se relacionam especificamente ao PostgreSQL e à extração de dados dos arquivos para várias análises.
Atualização: pergunta semelhante .
Acho que você deve armazenar os dados no banco de dados como uma
bytea
coluna normal. Dessa forma, você obtém todas as vantagens de um banco de dados e pode processar os dados usando funções de banco de dados (e até PL/Python, se desejar). Itens de dados maiores serão automaticamente armazenados fora da linha, portanto, não haveria razão para você introduzir outra referência indireta.As principais razões para armazenar grandes objetos binários fora do banco de dados seriam se eles fossem muito grandes para serem armazenados e recuperados em um tempo satisfatório, se eles incham o banco de dados além da praticidade ou se você precisasse acessar os arquivos como arquivos de um aplicativo separado. Nada disso se aplica lá, tanto quanto eu posso dizer.