0

像 JackRabbit 这样的内容存储库中的节点应该命名为什么?我不明白我是否以 id、文本等命名它们。

假设您要存储博客页面。你应该使用标题还是什么?

4

1 回答 1

2

他们的名字并不重要。如果可能的话,给它们命名一些对你的应用程序有意义的东西:客户名称、订单 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 属性值指向单个可引用节点,而不会出现可伸缩性问题。

于 2014-01-08T19:52:50.127 回答