在对JCR or RDBMS进行了一些研究并阅读了其他posts之后,我仍然不确定是否将JCR over JPA用于文档管理系统,该系统必须处理不同的文档类型,非常大的文件和并发访问很多来自许多用户。
我考虑使用JCR的主要原因是因为文档对我来说看起来像内容,并且该规范已经解决了它所带来的一些问题-我最感兴趣的是存储和版本控制。另外,我想将文档内容封装在JCR实现中,并将JPA用于其他所有特定于应用程序的东西。
也许有人可以帮我解决剩余的问题:
更新:尽管已经详细回答了这个问题,但从更实际的角度来看,某些人可能对其使用有更严格的了解。我个人越来越关注以下与技术无关的问题:
最佳答案
简短版本:文档是结构化或半结构化的内容。这就是用于分层组织的数据存储的用例。如果您不想自己实现所有基本的dms / cms东西,则应该去JCR(考虑一下,您可能是第一次这样做,而他们一直在这样做)。
长版:JCR通过规范涵盖了文档或内容管理系统的许多基本用例,例如版本控制,锁定,生命周期管理或参照完整性。此外,它还允许您扩展数据而无需更改架构(当然您可以在模型中定义节点类型,但不必这样做)。大多数JCR实现(例如Jackrabbit)都在后端使用数据库,这使它们比关系后端上的抽象层“少得多”。为了处理大数据,您可以使用文件系统存储(这比将每个二进制数据存储到数据库要快得多),同时在数据库中存储结构化数据(节点和属性)。
进行JPA时,您必须自己处理所有这些dms / cms内容。当然可以做到,但是在JCR实现中已经完成了很多底层编程。每个模型更改都需要一个模式更改,并且表布局并不是那么琐碎(您想为文档创建一个大表,而每个属性都是一列吗?是否要为每个文档类都有一个单独的表?如何您如何建模生命周期,如何建模版本?
对于使用JCR的第一跳,我建议David's Model,将应用程序的所有内容都视为内容。我曾在一个项目中工作过,在该项目中,我们决定将JCR和JPA混合使用,因此我们不必处理不同的API进行存储。
而且至少有一些JCR实现
顺便说一句。考虑到RESTful体系结构,JCR API和实现几乎完成了。因此,如果您考虑使用REST API,则映射也非常简单。此外,它允许消费者通过JCR API直接浏览内容,从而轻松地将内容集成到其他应用程序中(即只读),而您必须使用JPA揭示数据库的内部设计,从而使消费者合同更容易被破坏变化。
关于您剩余的问题:
关于java - DMS的JCR与JPA:性能,优点,缺点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30801604/