(一)Strategies介绍
可以看到代码中在实例化StandardJanusGraph类之前,有一个静态代码块来定义和注册TraversalStrateGies类,这个类包含了一系列TraversalStrategy。我们把这个类的注释翻译过来主要部分如下:
(1) TraversalStrategy用于改变一个Traversal的原子性操作
(2) 有六个(虽然只给出了五个)预定义的策略类型,我们会在下一篇详细说明每种策略:
- DecorationStrategy
- OptimizationStrategy
- ProviderOptimizationStrategy
- FinalizationStrategy
- VerificationStrategy
(3) 在添加Strategies时,同类型的策略互相排序。不同类型的策略根据 从上到下 排序
(4) 第六个类型是TraversalStrategy,不受上面的排序规则约束。
static {
TraversalStrategies graphStrategies = ...
TraversalStrategies.GlobalCache.registerStrategies(StandardJanusGraph.class, graphStrategies);
TraversalStrategies.GlobalCache.registerStrategies(StandardJanusGraphTx.class, graphStrategies);
}
从上面代码可以看到,原有的TraversalStrategies通过addStrategies添加新的策略。
(二) addStrategies(final TraversalStrategy<?>... strategies)
public TraversalStrategies addStrategies(final TraversalStrategy<?>... strategies) {
for (final TraversalStrategy<?> addStrategy : strategies) {
this.traversalStrategies.remove(addStrategy);
}
Collections.addAll(this.traversalStrategies, strategies);
this.traversalStrategies = TraversalStrategies.sortStrategies(this.traversalStrategies);
return this;
}
addStrategies分为三个部分
(1) 剔除已有策略中包含的即将添加的策略
(2) 添加策略
(3) 排序
完成以后将新的TraversalStrategies注册到图和图事物实体中。
(三) StandardJanusGraph中添加的六个Strategies
static {
TraversalStrategies graphStrategies =
TraversalStrategies.GlobalCache.getStrategies(Graph.class)
.clone()
.addStrategies(AdjacentVertexFilterOptimizerStrategy.instance(),
AdjacentVertexHasIdOptimizerStrategy.instance(),
AdjacentVertexIsOptimizerStrategy.instance(),
JanusGraphLocalQueryOptimizerStrategy.instance(),
JanusGraphStepStrategy.instance(),
JanusGraphIoRegistrationStrategy.instance()
);
...
}
在这个类初始化之前,就已经确定了6个策略,他们都是ProviderOptimizationStrategy接口的实现类,我们来看一下他们的作用。
(1)AdjacentVertexFilterOptimizerStrategy
对所有的TraversalFilterStep经过处理,替换为HasStep。
(2)AdjacentVertexHasIdOptimizerStrategy
对所有HasStep,替换为OptimizablePosition
(3)AdjacentVertexIsOptimizerStrategy
将所有的IsStep,替换为OptimizablePosition
(4)JanusGraphLocalQueryOptimizerStrategy
将所有的VertexStep,替换为 JanusgraphGraphVertexStep
(5)JanusGraphStepStrategy
将所有的GraphStep,替换为janusGraphStep
(6)JanusGraphIoRegistrationStrategy
如果traversal的startStep是IoStep,更新IoStep的配置
本文介绍了JanusGraph中的TraversalStrategy,包括其作用、添加策略的机制以及StandardJanusGraph初始化时添加的六个特定策略,如 AdjacentVertexFilterOptimizerStrategy 和 JanusGraphStepStrategy,这些策略用于优化图查询性能。
3060

被折叠的 条评论
为什么被折叠?



