Ява: Это плохая практика для хранения файловых потоков в базе данных?
Я читаю потоки файлов определенной группы файлов и храню их в базе данных как bytea
тип. Но когда я пытаюсь прочитать потоки из базы данных и записать эти потоки в файл, это действительно занимает много времени, и, наконец, я получаю исключение нехватки памяти. Есть ли другая альтернатива, где это можно сделать более эффективно с использованием базы данных или без нее?
1 ответ
Базы данных были разработаны с учетом ключевой проблемы:
When having a bunch of data, where we don't know the kinds of reports
that will be generated, how can we store the data in a manner that
preserves the data's inner relationships and permits any reporting
format we can think of. a
В файлах отсутствуют некоторые ключевые характеристики баз данных. Файлы последовательно имеют единую структуру "символы в порядке". Им также не хватает каких-либо средств интегрированного построения отчетов, и отчеты часто ограничиваются простыми поисками, которые имеют небольшой контекст без результата, отображаемого в остальной части файла.
Короче говоря, если вы не используете функции базы данных, пожалуйста, не используйте базу данных.
Многие люди хранят файлы в базах данных; потому что у них есть один удобный способ, и вместо того, чтобы писать поддержку для хранилища файловой системы, они вырезали и вставляли код хранилища базы данных. Давайте рассмотрим последствия:
- Резервное копирование и восстановление становятся проблематичными, поскольку размер базы данных очень быстро увеличивается, а пропускная способность для резервного копирования и восстановления зависит от размера базы данных.
- Перестройка репликации в отказоустойчивых базах данных занимает больше времени (я видел, что некоторые идут так долго, что избыточность не может догнать скорость изменения в первичной базе данных).
- Запросы, которые (случайно) ссылаются на файлы в больших объемах, нагружают ЦП, возможно, лишая доступа к остальной системе (зависит от базы данных).
- Пропускная способность возврата результатов этих запросов приводит к краже системных ресурсов, не позволяя другим запросам передавать свои результаты (лучше в некоторых базах данных, хуже в других).