- JDK 1.7
- TOMCAT 7
- postgresql 9.3
- Spring 3.2.9
- Hibernate 4.1.9
- IDE Intellij IDEA 13.1
Обоснование хранения файлов в БД
Некоторые базы позволяют хранить BLOB данные в отдельном дисковом пространстве, что позволяет распределить нагрузку при чтении/записи BLOB полей. Есть возможность партицирования такой таблицы. Можно использовать вариант хранения в другой БД и работой через db_link (в разных БД это название может отличаться)- также остается доступ к данным через sql и возможность снижение нагрузки на диск. С помощью ролей, реализуется один подход с предоставлением доступа ко всем данным сразу, как BLOB полей так и других.
Минусы файловой системы
- проблемы пути к файлам в файловой системе, при переезде на другой сервер
- дополнительно продублировать предоставление доступа, дополнителько к БД
- отсутствие транзакционности при работе с файловой системой
- в файловой системе есть возможность заражения вирусами
Решение В своем решении я вынес хранение BLOB полей в отдельную таблицу. Произвел денормализацию таблицы приказов и разбил на две таблицы, во второй таблице хранятся сканы приказов, эта таблица находится в другом tablespace - как пример возможного распределения нагрузки на диск.
Работа с формой сохранения приказа реализована через AJAX/jQuery. При сохранении приказа, таблица обновляется через AJAX, без полной загрузки и перерисовки страницы.
Установка
Для создания БД скрипт /src/main/db_scripts/create_db.sql В нем все комментарии по созданию БД
После развертывания на tomcat следует изменить параметры подключения к БД в файле /WEB-INF/classes/jdbc.properties на данный момент используется подключение к существующей БД, она видна в инете и таблицы пустые.
Файлы
Собраный war - /target/spring-test.war Используемые библиотеки - /target/spring-test/WEB-INF/lib