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 com aproximadamente 250kb de tamanho cada. No entanto, o número de arquivos aumentará com o tempo. Às vezes, talvez eu precise extrair dados dos arquivos para outras análises posteriores.
Eu fiz algumas pesquisas sobre a antiga questão de armazenar dados binários como BLOBs ou referências. Ambos obviamente têm seus prós e contras. Existem problemas específicos relacionados ao PostgreSQL dos quais devo estar ciente? Um método ou outro é preferível se eu quiser extrair dados dos arquivos, por meio da função PostgreSQL ou de um programa externo do Python?
Se eu armazenasse 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 que contém 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 perguntas aqui se referem especificamente ao PostgreSQL e à extração de dados dos arquivos para várias análises.
Atualização: pergunta semelhante .
fonte
Respostas:
Eu 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 as funções do banco de dados (e até o PL / Python, se desejar). Itens de dados maiores serão automaticamente armazenados fora da linha, portanto não haveria motivo para você introduzir outro indireto de referência.Os principais motivos para armazenar objetos binários grandes fora do banco de dados seriam se eles fossem muito grandes para poder armazená-los e recuperá-los em um tempo satisfatório, se inchar o banco de dados além da praticidade ou se você precisar acessar os arquivos como arquivos de um aplicativo separado. Nada disso se aplica lá, até onde eu sei.
fonte