AEM 6中的AEM平台基于Apache Jackrabbit Oak。
Apache Jackrabbit Oak旨在实现可伸缩、高性能的分层内容存储库,作为现代世界级网站和其他要求苛刻的内容应用程序的基础。
它是Jackrabbit 2的后继版本,AEM 6将其用作其内容存储库CRX的默认后端。
Oak实现了JSR-283(JCR 2.0)规范。 其主要设计目标是:
存储层的用途是:
Oak Core为存储层添加了多个层:
Oak JCR的主要目标是将JCR语义转换为树操作。 它还负责:
此外,非Java实现现在成为可能,并且是Oak JCR概念的一部分。
Oak存储层为内容的实际存储提供抽象层。
目前,AEM6中提供两种存储实施:Tar存储和MongoDB存储。
Tar存储使用tar文件。 它将内容存储为较大区段内的各种类型记录。 日志用于跟踪存储库的最新状态。
它围绕以下几个关键设计原则构建:
内容存储在大小可达256KiB的区段中。 它们是不可变的,这使得缓存经常访问的区段和减少可能损坏存储库的系统错误变得很容易。
每个段由唯一标识符(UUID)标识,并包含内容树的连续子集。 此外,区段可引用其他内容。 每个区段都保留其他引用区段的列表UUID。
相关记录(如节点及其直接子项)通常存储在同一段中。 这使得搜索存储库的速度非常快,并避免了每次会话访问多个相关节点的典型客户端的大多数高速缓存丢失。
记录的格式化已针对大小进行优化,以降低IO成本并将尽可能多的内容放入缓存中。
MongoDB存储利用MongoDB进行共享和群集。 存储库树保存在一个MongoDB文档库中,其中每个节点都是一个单独的数据库。
它有几个特点:
对于内容的每次更新(提交),将创建新修订。 修订版本基本上是一个包含三个元素的字符串:
支持分支,这使客户端能够暂存多个更改,并通过单个合并调用使其可见。
MongoDB存储通过每次修改向文档添加数据。 但是,仅当清理被显式触发时,才会删除数据。 当达到某个阈值时,将移动旧数据。 以前的文档只包含不可变的数据,这意味着它们只包含已提交和合并的修订。
为了便于群集操作,有关活动和非活动群集节点的数据被保存在数据库中。
使用MongoDB存储的典型AEM群集设置:
由于Oak的设计是向后兼容JCR 1.0标准,因此用户级别几乎不会发生任何变化。 但是,在设置基于Oak的AEM安装时,您需要考虑到一些显着的差异:
有关AEM平台的详细信息,另请查看以下文章: