像JackRabbit这样的内容存储库中的节点应该被命名为什么?我不明白我是否在id,text等之后命名它们。
假设您要存储博客页面。你应该使用标题还是什么?
答案 0 :(得分:2)
它们的名称并不重要。如果可能的话,将它们命名为对您的应用程序有意义的东西:客户名称,订单ID,用户名,附件文件名等。但是在所有情况下都很难做到(例如,Q& A网站上的问题),因此,您可能需要使用某些生成的密钥或标识符来命名节点。
无论您将节点命名为什么,请确保您的节点结构是层次结构而不是平面结构(例如,单个父节点下有数万个子节点)。 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节点,则考虑使用某种引用属性。参考和弱参考是双向的,但实现可以提供替代方案。例如,ModeShape提供" SIMPLE_REFERENCE"非标准但单向的属性,这意味着您可以将任意数量的SIMPLE_REFERENCE属性值指向单个可引用节点,而不会出现可伸缩性问题。