用这么少的信息很难提供好的建议。但是,您包含“JCR”标签,听起来您的用例类似于内容或文档管理系统,因此您绝对应该考虑 JCR。请参阅“何时使用 JCR 而不是其他选项?” 以获得更一般的响应,但我将尝试描述它对您的特定用例的好处。(不过,始终选择最适合工作的工具。)
也许 JCR 对您来说最好的特性是能够拥有一个灵活的模式,它允许您随着时间的推移为不同的文档添加(或更改)元数据。您可以限制属性以确保您的应用程序仅添加可接受的信息,或者您可以选择稍微宽松一些并保持选项开放以根据需要添加其他元数据。您甚至可以将元数据分解为“特征”,这些“特征”可以通过 mixins 添加到各个节点。简而言之,JCR 在设计数据结构时为您提供了极大的灵活性,同时为您提供了几个旋钮来控制您使用多少强制/灵活性。
使用 JCR 存储库还可以让您将元数据与文档一起保存(如果需要;您可以随时将它们分开)。而且,如果您的应用程序使用读取文档然后获取元数据的访问模式,这可能会给您的应用程序带来出色的性能。导航通常比查询快得多。
第三,许多 JCR 存储库甚至支持查询存储库内容(通过将节点类型映射到类似关系表的结构中)。JCR 2.0 有多种语言,包括 XPath 和一种称为“JCR-SQL2”的类似 SQL 的语言。
JCR 有一些对象映射库,但它们很可能会阻碍真正利用 JCR 的数据结构灵活性。JCR 本身是一个 Java API,它内置了对事件、安全、查询、锁定、版本控制等的支持。
如果您确实查看了 JCR,请务必查看不同的实现,包括Jackrabbit和ModeShape。它们各自提供不同的东西(例如,Jackrabbit 是参考实现,而 ModeShape 提供了一些扩展和附加功能,例如扩展查询语言和排序;请参阅这个相关问题)。