【问题标题】:Apache Jackrabbit vs Rolling your on Content RepositoryApache Jackrabbit 与滚动内容存储库
【发布时间】:2012-12-15 08:23:46
【问题描述】:

我正在考虑将 Apache Jackrabbit 用于个人项目,但想知道与自定义内容存储库或内容存储在文件系统中的传统数据库相比,使用它有哪些优势/劣势。

我不确定我是否喜欢 JCR 的树形结构,所以如果您能解释其背后的设计决策 (adv/dis),它也会有所帮助。

【问题讨论】:

    标签: java apache jcr


    【解决方案1】:

    使用现有的 JCR 实现有几个好处,例如 JackrabbitModeShape。首先,您可以立即免费获得很多功能:

    • 分层数据存储 - 大量数据自然是分层的,JCR 存储库允许您以应用程序访问数据的方式组织数据。任何以 URI、日期/时间、类别或文件夹结构为关键字的内容都适合存储在存储库中。
    • 使用标准 Java API - JCR API 是带有 TCK 的标准 Java API,这意味着您的应用程序可以依赖于标准行为,而不是绑定到特定的 JCR 实现。
    • 灵活的架构实施 - 您可以根据您定义和使用节点类型的方式来选择是否以及在何处实施节点结构和属性值。
    • 数据演变 - 您的数据结构可能会随着时间的推移而演变,而 JCR 让这一切变得非常容易。
    • 查询和全文搜索 - 您的应用程序可以浏览数据,也可以独立于位置查询内容。 JCR 查询语言非常丰富,并且支持全文搜索。
    • 事务 - 您可以控制事务边界,这意味着 JCR 会话可以参与由您的应用程序或其容器控制的 JTA 事务。
    • 事件 - 当添加、更改或删除节点和/或属性时,您的应用程序会收到通知。
    • 集群 - 通过跨多个进程集群 JCR 存储库来扩展您的应用程序。每种实现都以不同的方式配置集群,但它们对客户端应用程序的行为相同。
    • 版本控制 - JCR 包含用于版本控制内容的标准机制。它可能并不适合所有用例,但在合适的时候非常方便。
    • 锁定 - JCR 包含一种用于短期锁定的标准机制,当您的应用程序需要确保部分存储库仅由一个进程更新时,该机制非常有用。

    如果其中一些功能对您很重要,那么您绝对应该考虑重用现有的实现,而不是自行开发 - 否则您将花费​​所有时间来实现这些功能。

    但是,如果这些功能都不适合您的用例,那么您应该考虑其他数据存储技术:

    • 当您的数据非常受限、架构不太可能经常更改或数据扁平(一些键类型的大量值)时,关系数据库非常有用。 (请注意,许多 JCR 实现可以将内容存储在关系数据库中,因此“我必须将我的数据存储在关系数据库中”并不是您的应用程序直接使用关系数据库的好理由。)
    • 当您需要通过唯一键存储任意值并且所有访问都通过gets 和puts 进行时,键值存储非常有用。这些值通常对商店是不透明的。
    • 文档存储类似于键值存储,不同之处在于存储知道值的结构。一些文档存储支持查询。
    • 其他存储技术也有自己的优势。

    其他要考虑的事情是您是否需要或想要最终一致的数据库或强一致的数据库。针对强一致性数据库编写许多“常规”应用程序要容易得多,事实上,大多数 JCR 存储库(包括 Jackrabbit 和 ModeShape)都是强一致性的。

    【讨论】:

      猜你喜欢
      • 2013-07-20
      • 1970-01-01
      • 2012-06-08
      • 2010-09-26
      • 2012-08-12
      • 2010-09-27
      • 1970-01-01
      • 2016-03-07
      • 2012-06-21
      相关资源
      最近更新 更多