/Letter

Letter test task

Primary LanguageJava

  • 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