JanusGraph入坑笔记(三)- StandardJanusGraph

本文介绍了JanusGraph中的TraversalStrategy,包括其作用、添加策略的机制以及StandardJanusGraph初始化时添加的六个特定策略,如 AdjacentVertexFilterOptimizerStrategy 和 JanusGraphStepStrategy,这些策略用于优化图查询性能。

(一)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的配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值