Когда использовать JCR (хранилище содержимого) поверх других параметров? - PullRequest
73 голосов
/ 11 октября 2010

Я пытаюсь оценить репозитории контента ( JSR283 ), например Jackrabbit и ModeShape , но я должен признаться, что не понимаю, какая проблема решается впервое место и даже если это хороший выбор для проекта.Как вы думаете, в каких случаях это лучшее решение?Разве это не то же самое, что реляционные базы данных, кроме размера?Зачем?Дополнительные баллы за примеры из реальной жизни.

Заранее спасибо.

1 Ответ

83 голосов
/ 11 октября 2010

JCR-репозитории отличаются от RDBMS, потому что JCR-репозиторий:

  • является иерархическим, позволяя вам организовать ваш контент в структуру, которая точно соответствует вашим потребностям и где связанная информация часто хранится близко друг к другуи, таким образом, легкая навигация
  • является гибкой, позволяя контенту адаптироваться и развиваться, используя систему типов узлов, которая может быть полностью «без схемы» для полного ограничения (например, как реляционная база данных)
  • использует стандартный Java API (например, javax.jcr)
  • рефераты, где информация действительно хранится: многие реализации JCR могут хранить контент в различных реляционных базах данных и других хранилищах, некоторые могут предоставлять не-JCRхранилища через JCR API, а некоторые могут объединять несколько хранилищ в один виртуальный репозиторий.
  • поддерживает запросы и полнотекстовый поиск "из коробки"
  • поддерживает события, блокировки, управление версиями идругие функции

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

Какие приложения могут извлечь выгоду из этих функций?Системы управления контентом долгое время использовали репозитории, и JCR (и Jackrabbit) действительно выросли из необходимости общего стандартного API для доступа к различным репозиториям контента (см. JSR-170 и JSR-283 ).

Другим примером являются системы управления документами, которые управляют электронными файлами (которые часто являются изображениями бумажных документов) и обеспечивают поиск и запрос.DMS в течение некоторого времени использовали репозитории.

Системы управления артефактами могут использовать репозитории для управления цифровыми артефактами (часто файлами) наряду с дополнительной информацией (метаданными).JCR отлично работает здесь, потому что вы можете хранить метаданные в том же месте, что и файлы: те, кто понимает эти дополнительные свойства, могут видеть их, те, кому все равно, не должны их видеть.Я знаю, Artifactory - это реализация репозитория Maven, использующая JCR.Существуют также репозитории для управления артефактами веб-служб, артефактами служб данных и артефактами тестирования.

Но репозитории JCR не предназначены для управления файлами.JCR использует простое понятие иерархии узлов, где узлы могут содержать именованные свойства (с одним или несколькими значениями) и дочерние элементы.Разрешенные свойства и дочерний узел полностью определяются типами узлов, которые можно изменять и смешивать по мере необходимости для каждого узла.JCR предопределяет некоторые встроенные типы узлов, которые обычно необходимы, например, те, которые используются для представления файлов и папок в хранилище.Вы можете повторно использовать эти встроенные типы, расширять их или писать свои собственные.Многие люди рекомендуют использовать миксины почти в качестве фасетов или аспектов, поэтому, если узлу необходимо принять фасет, вы можете просто добавить миксины к узлу.

JCR была разработана для простой поддержки импорта содержимого XML в репозиторий.где каждый элемент сопоставлен с узлом, а каждый атрибут сопоставлен с атрибутом.И многие вещи представлены с использованием XML (или YAML или JSON), и все это можно легко представить и сохранить в репозитории JCR.В качестве примера рассмотрим репозиторий JCR, в котором хранится информация о конфигурации (которая обычно может храниться в нескольких файлах XML).JCR может создавать версии этой информации, разрешать доступ к ней из нескольких процессов, включать запросы и поиск, а также уведомлять приложения об изменении содержимого.

Существует несколько хороших обзоров JCR с более подробной информацией и примерами.Вот некоторые из них:

...