Хранение длинных двоичных (необработанных данных) строк - PullRequest
5 голосов
/ 15 сентября 2011

Мы собираем необработанную двоичную строку переменного размера (от 100 до 800 КБ), и мы хотели бы сохранить эти отдельные строки.Их не нужно индексировать (дух), и не будет запросов к содержимому поля.

Количество этих вставок будет очень большим (они предназначены для архивных целей), скажем, 10 000 надень.Каков наилучший тип поля для больших двоичных строк, подобных этим?Это должно быть text или blob или что-то еще?

Ответы [ 3 ]

15 голосов
/ 16 сентября 2011

Что касается PostgreSQL , то тип text исключен.Он медленнее, использует больше места и более подвержен ошибкам, чем bytea для этой цели.
Существует в основном 3 подхода:

  1. тип использования bytea (в основном pg-эквивалент типа BLOB-объекта SQL)

  2. использование " больших объектов "

  3. сохраняет большие двоичные объекты как файлы в файловой системе и сохраняет только имя файла в базе данных.

У каждого есть свои преимущества и недостатки.

  1. довольно прост в обращении, но требует наибольшего дискового пространства.Требуется некоторое декодирование и кодирование, что делает его также медленным.Размеры резервных копий быстро растут!

  2. немного неудобно в обращении, но у вас есть собственная инфраструктура для работы с BLOB-объектами - если вам это нужно.Кроме того, вы можете легко создавать отдельные резервные копии.

  3. - самый быстрый способ и занимает меньше места на диске.Но он не обеспечивает ссылочную целостность, которую вы получаете при хранении внутри базы данных.

У меня есть несколько реализаций, подобных этой для файлов изображений: сохраните небольшую миниатюру в байтовом поле для ссылочной целостности и быстрой ссылки.Сохраните исходное изображение как файл в файловой системе.Конечно, вам нужно подумать, когда и как удалять устаревшие файлы, как создавать резервные копии внешних файлов и тому подобное.

2 голосов
/ 15 сентября 2011

Вероятно, вы должны использовать blob в большинстве баз данных.text столбцы часто будут нормализованы или преобразованы в соответствии с кодировкой текста или локалью;и поэтому фактические байты не могут быть сохранены, как ожидалось.Почти во всех случаях это единственная разница между столбцами text и blob.

0 голосов
/ 15 сентября 2011

У нас есть пользовательский столбец VARBINARY для хранения до 300 МБ файлов.

...