Хранение и управление данными
Большинству приложений для работы необходима система для хранения и управления данными.
PostgreSQL
PostgreSQL — это объектно-реляционная СУБД, с открытым исходным кодом. Она поддерживает большую часть стандарта SQL и предлагает множество современных функций, стремится соответствовать стандарту ANSI-SQL:2008, следуя требованиям ACID (атомарность, согласованность, изолированность и надежность) и обладает транзакционной и ссылочной целостностью.
PostgreSQL поддерживает материализованные представления, которые хранятся на диске и их можно индексировать для ускорения выполнения запросов. Триггеры это функции, инициируемые DML-операциями. К примеру, INSERT может запускать триггер, который проверит добавленную запись на соответствия каким-то условиям. Кроме стандартных типов данных, поддерживаются uuid, геометрического, денежного, бинарного, перечисляемого типов, сетевых адресов, xml, json,битовых строк, текстового поиска, массивов, композитных типов и диапазонов, а также некоторых внутренних типов для идентификации объектов и местоположения логов. Можно создать новые типы данных, такие как составной, перечисляемый, диапазон и базовый.
Для удобства работы необходимо обеспечить взаимодействие с данными в терминах классов, а не таблиц данных и наоборот, преобразовать термины и данные классов в данные, подходящие для хранения в СУБД. Ещё необходимо обеспечить интерфейс для CRUD-операций над данными. В общем, желательно избавиться от необходимости писать SQL-код для взаимодействия с СУБД.
Hibernate
Hibernate - это Java библиотека, решающая задачи объектно-реляционного отображения (ORM). Она применима при проектировании системы с нуля, и для работы с существующей базой. Библиотека решает задачу связи классов Java с таблицами базы данных (и типов данных Java с типами данных SQL), позволяет автоматически генерировать и обновлять набор таблиц, строить запросы и обрабатывать полученные данные, что позволяет уменьшить время разработки, которое расходуется на ручное написание SQL- и JDBC-кода и облегчает перенос приложения на любые базы данных SQL.
Hibernate может использоваться как в самостоятельных приложениях Java, так и в программах Java EE, выполняемых на сервере или включаться как дополнительная возможность к другим языкам программирования, он совместим с JSR-220/317 и предоставляет стандартные средства JPA.
Mapping Java-классов с таблицами базы данных осуществляется с помощью конфигурационных XML-файлов или Java-аннотаций. Hibernate может организовать отношения между классами «один-ко-многим» и «многие-ко-многим», а также управлять рефлексивными отношениями, где объект имеет связь «один-ко-многим» с другими экземплярами своего собственного типа данных. Связанные объекты могут быть настроены на каскадные операции, для сокращения времени разработки и обеспечения целостности. Dirty checking позволяет избежать ненужной записи в базу, выполняя SQL-обновление только при изменении персистентных объектов.
Hibernate обеспечивает использование SQL-подобного языка Hibernate Query Language (HQL), который позволяет выполнять SQL-подобные запросы, записанные рядом с объектами данных Hibernate. Запросы критериев предоставляются как объектно-ориентированная альтернатива к HQL.
Spring Data
Задача Spring Data - предоставить знакомую и понятную модель программирования для доступа к данным, основанную на Spring, которая будет сохранять характерные черты основного хранилища данных. Spring Data содержит в себе много специфичных подпроектов. Она упрощает использование технологий доступа к данным для реляционных и нереляционных баз данных, map-reduce фреймворков и облачных сервисов.
Spring Data JPA реализует слой доступа к данным, который может быть достаточно громоздким. Слишком много шаблонного кода пишется для реализации таких задач, как разбивка на страницы и аудит. Spring Data JPA призвано значительно улучшить реализацию слоя доступа к данным, сократив усилия на то, что действительно необходимо. Как разработчик, вы пишете интерфейс репозитория, включая собственные методы поиска, а Spring обеспечивает их автоматическую реализацию.
MongoDB
MongoDB — документоориентированная СУБД с открытым исходным кодом, не требующая описания схемы таблиц. Классифицирована как NoSQL, использует JSON-подобные документы и схему базы данных. Н аписана на языке C++. В MongoDB имеется поддержка индексов.
MongoDB может работать с набором реплик, который состоит из двух и более копий данных. Каждый экземпляр может в любой момент выступать в роли основной или вспомогательной реплики. Когда основная реплика дает сбой, набор реплик проводит выбор, который из реплик должен стать основным. Второстепенные реплики дополнительно являться источником для операций чтения. Также MongoDB можно использовать в качестве файлового хранилища с балансировкой нагрузки и репликацией данных. Масштабируется MongoDB горизонтально, используя шардинг.