像 JackRabbit 这样的内容存储库中的节点应该命名为什么?我不明白我是否以 id、文本等命名它们。
假设您要存储博客页面。你应该使用标题还是什么?
像 JackRabbit 这样的内容存储库中的节点应该命名为什么?我不明白我是否以 id、文本等命名它们。
假设您要存储博客页面。你应该使用标题还是什么?
他们的名字并不重要。如果可能的话,给它们命名一些对你的应用程序有意义的东西:客户名称、订单 ID、用户名、附件文件名等。但这在所有情况下都很难做到(例如,问答网站上的问题),所以你可能需要求助通过一些生成的密钥或标识符来命名节点。
无论您如何命名节点,请确保您的节点结构是层次结构而不是平面结构(例如,在一个父节点下有数万个子节点)。JCR 存储库本质上是分层的,并且当结构是分层的时总是会表现得更好。
例如,“ /orders/{id}
”将适用于少量客户,但当客户数量超过几千时会很困难。如果可能,请使用将{id}
价值空间细分为可管理部分的附加层。日期有时有效:
/orders/yyyy/mm/dd/{id}
或者如果这些id
值足够随机且分布良好(例如,UUID 或 SHA1),那么您可以使用以下部分进行细分id
:
/orders/{id-chars1-2}/{id-chars3-4}/{id}
此外,当确保不重复很困难时,使用 JCR 同名兄弟也能很好地工作。一般来说,同名兄弟是有问题的,因为路径可以改变,使得依赖路径的应用程序变得困难(即使是很短的时间,例如,请求之间)。但是,如果应用程序总是读取 SNS 子代并立即处理它们,那么您的应用程序可能会接受同名兄弟姐妹。
通常,使用路径代替 REFERENCE 或 WEAKREFERENCE 属性,在这些情况下,SNS 节点非常糟糕,因为“参考路径”不耐用。如果您使用 SNS 节点,请考虑使用某种引用属性。REFERENCE 和 WEAKREFERENCE 是双向的,但实现可以提供替代方案。例如,ModeShape 提供非标准但单向的“SIMPLE_REFERENCE”属性,这意味着您可以有任意数量的 SIMPLE_REFERENCE 属性值指向单个可引用节点,而不会出现可伸缩性问题。