Мне нужно хранить двоичные файлы данных в базе данных PostgreSQL, которая работает на сервере Ubuntu. Первоначально будет несколько десятков файлов размером примерно 250 КБ каждый. Однако количество файлов со временем будет увеличиваться. Иногда мне может понадобиться извлечь данные из файлов для других последующих анализов.
Я провел некоторое исследование относительно давнего вопроса хранения двоичных данных в виде BLOB или ссылок. У обоих явно есть свои плюсы и минусы. Есть ли какие-то конкретные проблемы, связанные с PostgreSQL, о которых мне следует знать? Один метод или другой предпочтительнее, если я хочу извлечь данные из файлов, либо с помощью функции PostgreSQL, либо с помощью внешней программы Python?
Если бы я должен был хранить файлы данных непосредственно в базе данных, было бы лучше хранить их в отдельной таблице с внешним ключом, ссылающимся на «главную» таблицу, а не в таблицу, содержащую все остальные поля?
Я прочитал вопрос и ответы здесь ; комментарий там предполагает, что лучше хранить бинарные файлы по ссылке (в файловой системе) в Linux. Мои вопросы здесь касаются конкретно PostgreSQL и извлечения данных из файлов для различных анализов.
Обновление: аналогичный вопрос .
источник
Ответы:
Я думаю, что вы должны хранить данные в базе данных как обычный
bytea
столбец. Таким образом, вы получаете все преимущества базы данных и можете обрабатывать данные, используя функции базы данных (и даже PL / Python, если хотите). Более крупные элементы данных будут автоматически сохраняться вне строки, поэтому у вас не будет причин вводить другую ссылочную косвенность.Основные причины хранения больших двоичных объектов вне базы данных заключаются в том, что они слишком велики, чтобы их можно было хранить и извлекать за удовлетворительное время, если они заполняют базу данных за пределы практичности, или если вам нужен доступ к файлам в виде файлов из отдельное приложение. Насколько я могу судить, там все это не применимо.
источник