【问题标题】:What exactly is the definition of a content repository?内容存储库的具体定义是什么?
【发布时间】:2013-12-20 20:43:53
【问题描述】:

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

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

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

  3. 内容存储库是否总是按层次组织?

我正在努力定义内容存储库的定义。

【问题讨论】:

标签: java jakarta-ee jackrabbit content-repository


【解决方案1】:

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

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

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

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

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

是的,但你不应该这样做。

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

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

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

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

【讨论】:

    【解决方案2】:

    如果您允许无耻插件,我的“Java Content Repository - the best of both worlds”文章可能有助于了解什么是内容存储库。

    在 JSR 283 规范中,Java 内容存储库被定义为

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

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

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

    【讨论】:

    • JCR 可能就是这种情况,但不幸的是,我只处理 Jckrabbit 实现,由于某种原因,它在 JCR API 上强加了一个全新的 API,坦率地说,我发现这是不可能的整合为单一来源。而且我当然不准备放弃价值交易的 SQL 事务和 ACID 属性,转而支持我在任何内容存储库中可能找到的任何内容。
    • 您指的是哪个“新 API”? Apache Jackrabbit 是 JSR 170 和 283 的参考实现,因此它完全支持 JCR。
    • 我的意思是,例如他们添加的所有额外权限,这些权限并没有完全映射到 JCR 权限。注意我没有声称它不支持 JCR。
    • 好的,感谢您的澄清。就@LuckyLuke 存储图像和其他数据的用例而言,额外的权限可能不会产生影响。
    猜你喜欢
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2015-09-02
    • 2017-05-30
    • 2016-12-06
    相关资源
    最近更新 更多