内容存储库的定义究竟是什么?

时间:2013-12-20 20:43:53

标签: java java-ee jackrabbit content-repository

我使用Apache JackRabbit存储我的应用程序的图像。我刚开始使用它,我还有一些问题没有答案:

  1. 内容存储库和数据库有什么区别?

  2. 您是否可以使用内容存储库来保存应用程序的所有数据而不是数据库? (我知道你可以添加所有类型的节点和属性,如果你真的应该保存内容存储库中的所有东西,它更像是一个问题。)

  3. 内容存储库是否始终按层次结构组织?

  4. 我对内容存储库的定义感到困惑。

2 个答案:

答案 0 :(得分:2)

如果你允许一个无耻的插头,我的" Java Content Repository - the best of both worlds"文章可能有助于理解内容存储库是什么。

在JSR 283规范中,Java Content Repository定义为

  

用于数据存储和相关服务的抽象模型和Java API   通常由面向内容的应用程序使用。

所以你可以说它是一个最适合面向内容的应用程序的存储系统,例如作为网站的后端。它比分层数据库和对象数据库更类似于关系数据库,我们经常将其称为"类固醇的文件系统"这意味着它非常适合文件存储,但功能更多。 "相关服务"在上面的定义中非常丰富,包括版本控制,观察,细粒度访问控制,结构化和全文搜索 - 处理内容时需要的许多东西。

话虽如此,我不同意@EJP使用多个数据存储必然更好 - JCR的一个主要好处是它可以很好地将文件存储与类似数据库的操作和非结构化的无模式存储集成,而不需要那种混合@EJP提到的系统,可能更难管理。根据您的需求,更专业的存储系统可能会有用,但JCR提供了许多开箱即用的功能,如果您创建自己的混合存储系统,您必须重新发明。

答案 1 :(得分:1)

  

我正在使用Apache JackRabbit为我的应用程序存储图像。

为什么呢?如果你不知道它是为了什么?这不是最擅长的事情之一。最好将图像存储在文件系统中。

  

内容存储库和数据库之间有什么区别?

数据库用于您希望以事务方式访问的结构化数据。内容存储库基本上用于文档,您可能需要在版本控制,层次结构,所有权,......

  

您是否可以使用内容存储库来保存应用程序的所有数据而不是数据库?

是的,但你不应该。

  

内容存储库是否总是在层次结构中组织?

如何组织它取决于你,但这是通常的方式。

例如,我目前正在使用四个数据存储区:

  1. 文件系统,用于图像和其他静态资源。
  2. 数据库,用于结构化交易数据。
  3. LDAP服务器,用于用户数据。
  4. JCR存储库,用于文档,版本控制,层次结构,WebDAV访问等。