Существует несколько преимуществ использования существующей реализации JCR, например Jackrabbit или ModeShape. В первую очередь, вы сразу получите много функциональных возможностей бесплатно:
- иерархического хранения данных - Множество данных, естественно, иерархическая, и хранилище JCR позволяет организовать данные таким образом, что ваши приложения будут обращаться Это. Все, что связано с URI, датой/временем, категориями или структурами папок, естественным образом подходит для хранения в репозитории.
- Использование стандартного Java API - JCR API - это стандартный Java API с TCK, что означает, что ваши приложения могут полагаться на стандартное поведение и не привязываться к конкретной реализации JCR.
- Гибкое применение схемы - Вы можете выбрать, где и когда структура узла и значения свойств выполняются путем определения и использования типов узлов.
- Разработка данных - Ваша структура данных, вероятно, будет развиваться с течением времени, и JCR сделает это очень легко.
- Запрос и полнотекстовый поиск - Ваши приложения могут перемещаться по данным или могут запрашивать контент независимо от местоположения. Языки запросов JCR очень богаты, и они поддерживают полнотекстовый поиск.
- Сделки - Вы можете контролировать границы транзакций, что означает, что JCR Sessions могут участвовать в транзакциях JTA, контролируемых вашим приложением или его контейнером.
- События - Ваши приложения могут быть уведомлены о добавлении, изменении или удалении узлов и/или свойств.
- Clustering - Масштабирование приложения путем кластеризации репозитория JCR для нескольких процессов. Каждая реализация настраивает кластеризацию по-разному, но они ведут себя одинаково для клиентских приложений.
- Versioning - JCR включает в себя стандартный механизм для управления версиями контента. Возможно, он не подходит для всех случаев использования, но он очень удобен, когда он подходит.
- Блокировка - JCR включает в себя стандартный механизм для кратковременных блокировок, которые полезны, когда ваши приложения должны обеспечить, чтобы части репозитория обновлялись только одним процессом.
Если некоторые из этих функций важны для вас, то вам обязательно стоит подумать о повторном использовании существующей реализации, а не об откате, иначе вы будете тратить все свое время на реализацию этих функций.
Однако, если ни одна из этих функций не подходит для вашего варианта использования, то вам следует рассмотреть другие технологии хранения данных:
- реляционные базы данных отлично работают, когда ваши данные очень ограничены, когда ваша схема, скорее всего, изменения не слишком часто, или когда ваши данные плоские (много значений нескольких типов ключей). (Обратите внимание, что многие реализации JCR могут хранить содержимое внутри реляционных баз данных, поэтому «я должен хранить свои данные в реляционной базе данных» на самом деле не является хорошей причиной для того, чтобы ваше приложение напрямую использовало реляционную базу данных.)
- Key-value магазины отлично работают, когда вам нужно хранить произвольные значения с помощью уникальных ключей, а весь доступ осуществляется через get и puts. Значения обычно непрозрачны для магазина.
- Хранилища документов аналогичны хранилищам значений ключа, за исключением того, что хранилище известно о структуре значений. Некоторые хранилища документов поддерживают запросы.
- Другие технологии хранения имеют свое собственное сладкое пятно.
Другие вопросы, которые необходимо учитывать, - это необходимость или необходимость создания в конечном итоге базы данных или сильно согласованной базы данных. Гораздо проще написать много «обычных» приложений против сильносовместимых баз данных, и на самом деле большинство репозиториев JCR (включая Jackrabbit и ModeShape) сильно согласованы.