Трудно дать хороший совет с таким небольшим количеством информации. Однако вы включили тег «JCR», и похоже, что ваш вариант использования похож на систему управления контентом или документами, поэтому вам определенно следует рассмотреть JCR. См. "Когда использовать JCR вместо других вариантов?" для более общего ответа, но я попытаюсь описать его преимущества для вашего конкретного случая использования. (Однако всегда выбирайте лучший инструмент для работы.)
Возможно, лучшая функция JCR для вас — это возможность иметь гибкую схему, которая позволяет добавлять (или изменять) метаданные для разных документов и с течением времени. Вы можете либо ограничить свойства, чтобы ваши приложения добавляли только принятую информацию, либо вы можете быть немного свободнее и оставить свои параметры открытыми, чтобы добавлять дополнительные метаданные по мере необходимости. Вы даже можете разбить свои метаданные на «характеристики», которые можно добавить к отдельным узлам с помощью миксинов. Короче говоря, JCR дает вам массу гибкости при проектировании вашей структуры данных, а также дает вам несколько ручек для контроля того, насколько принудительно/гибко вы используете.
Использование репозитория JCR также позволит вам сохранить эти метаданные вместе с документом (при желании их всегда можно разделить). И это может повысить производительность ваших приложений, если они используют шаблоны доступа, которые читают документ, а затем получают метаданные. Навигация часто намного быстрее, чем запросы.
В-третьих, многие репозитории JCR даже поддерживают запросы к содержимому репозитория (путем сопоставления типов узлов с реляционными табличными структурами). JCR 2.0 имеет несколько языков, в том числе XPath и SQL-подобный язык под названием «JCR-SQL2».
Есть несколько библиотек отображения объектов для JCR, но они, скорее всего, будут мешать реальному использованию гибкости структуры данных JCR. JCR сам по себе является API Java и имеет встроенную поддержку событий, безопасности, запросов, блокировки, управления версиями и т. д.
Если вы посмотрите на JCR, обязательно ознакомьтесь с различными реализациями, включая Jackrabbit и ModeShape. Каждый из них предлагает что-то свое (например, Jackrabbit является эталонной реализацией, а ModeShape предлагает некоторые расширения и дополнительные функции, такие как расширенные языки запросов и последовательность; см. это связанный вопрос).
person
Randall Hauch
schedule
22.05.2012