Ява: Это плохая практика для хранения файловых потоков в базе данных?

Я читаю потоки файлов определенной группы файлов и храню их в базе данных как 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

В файлах отсутствуют некоторые ключевые характеристики баз данных. Файлы последовательно имеют единую структуру "символы в порядке". Им также не хватает каких-либо средств интегрированного построения отчетов, и отчеты часто ограничиваются простыми поисками, которые имеют небольшой контекст без результата, отображаемого в остальной части файла.

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

Многие люди хранят файлы в базах данных; потому что у них есть один удобный способ, и вместо того, чтобы писать поддержку для хранилища файловой системы, они вырезали и вставляли код хранилища базы данных. Давайте рассмотрим последствия:

  1. Резервное копирование и восстановление становятся проблематичными, поскольку размер базы данных очень быстро увеличивается, а пропускная способность для резервного копирования и восстановления зависит от размера базы данных.
  2. Перестройка репликации в отказоустойчивых базах данных занимает больше времени (я видел, что некоторые идут так долго, что избыточность не может догнать скорость изменения в первичной базе данных).
  3. Запросы, которые (случайно) ссылаются на файлы в больших объемах, нагружают ЦП, возможно, лишая доступа к остальной системе (зависит от базы данных).
  4. Пропускная способность возврата результатов этих запросов приводит к краже системных ресурсов, не позволяя другим запросам передавать свои результаты (лучше в некоторых базах данных, хуже в других).
Другие вопросы по тегам