Java 在内容存储库中命名节点

Java 在内容存储库中命名节点,java,jakarta-ee,jackrabbit,jcr,modeshape,Java,Jakarta Ee,Jackrabbit,Jcr,Modeshape,像JackRabbit这样的内容存储库中的节点应该命名为什么?我不明白我是否以id、文本等命名它们 假设您将要存储博客页面。你应该使用标题还是什么?它们的名字其实并不重要。如果可能的话,给它们命名一些对您的应用程序有意义的东西:客户名称、订单ID、用户名、附件文件名等。但这在所有情况下都很难做到(例如,问答网站上的问题),因此您可能需要通过生成的密钥或标识符来命名节点 无论您如何命名节点,请确保您的节点结构是层次结构,而不是平面结构(例如,在单个父节点下有成千上万个子节点)。JCR存储库本质上是

像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子项并立即处理它们,那么您的应用程序可能会接受同名同级

通常,使用路径代替引用或WEAKREFERENCE属性,在这些情况下,SNS节点非常糟糕,因为“引用路径”不持久。如果使用SNS节点,则考虑使用某种引用属性。引用和WEAKREFERENCE是双向的,但实现可能提供替代方案。例如,ModeShape提供非标准但单向的“SIMPLE_REFERENCE”属性,这意味着您可以有任意数量的SIMPLE_REFERENCE属性值指向单个可引用节点,而不会出现可伸缩性问题