2014-01-08 17 views
0

像JackRabbit这样的内容存储库中的节点应该如何命名?我不知道我是否ID后他们的名字,文本等内容存储库中的命名节点

比方说您正要商店博客网页。你应该使用标题还是什么?

回答

2

这并不重要,它们被命名为东西。如果可能的话,他们的名字的东西,这意味着什么给你的应用程序:客户名称,订单ID,用户名,附件的文件名等,但是,这是很难在所有的情况下(例如,在Q &一个网站的问题),所以你可能需要做通过一些生成的密钥或标识符来求助于命名节点。

不管你命名的节点,请确保您的节点结构是一个层次,而不是一个平面结构(例如,与子节点数以万计的单亲下)。 JCR存储库具有固有的层次结构,并且在结构层次化时总能更好地执行。

例如,“/orders/{id}”将与客户的少量工作,但是当客户的数量比几千多必争。如果可能,请使用额外的图层,将{id}值空间细分为可管理的部分。日期有时工作:

/orders/yyyy/mm/dd/{id} 

,或者如果id值是足够随机和均匀分布(例如,UUID的或SHA1s),然后就可以细分使用id的部分:

/orders/{id-chars1-2}/{id-chars3-4}/{id} 

另外, JCR同名兄弟姐妹在确保不重复的情况下很难发挥作用。一般来说,同名兄弟姐妹是有问题的,因为路径可能会改变,使得依赖路径的应用程序(即使是在短时间内,例如请求之间)很困难。但是,如果应用程序始终读取SNS子项并立即处理它们,则可能会为您的应用程序接受同名兄弟。

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