• 解决Janusgraph索引状态不变更的问题


    JanusGraph的索引因为要同步不同实例及不同后端的数据,因此不是实时能够完成的,视配置,网络和数据量不同,建立/生效索引通常需要一段时间,这也是为什么创建索引时会创建wait()的原因。

    在实践中,我们经常遇到timeout()异常的出现,这一方面有数据量,网络,配置的原因,另外一方面,如果系统中有未关闭的事务或者无效的实例,均会导致索引创建阻塞,不断等待,最后超时。下面是我们团队在使用JansuGraph总结出的,解决索引超时的实践,希望对后来者有所帮助。

    自身Bug

    JanusGraph现在发布的版本0.1.1/0.1.0中存在一个bug,也即如果将已经创建的属性key加入新创建的索引中,索引状态始终保持在INSTLLED,不会切换到REGISTERED状态,该问题在github上有,最为简单的解决方案是升级JansuGraph到主干。0.2.0的发布时间尚未确定。

    存在没有关闭的Transaction

    如果图中存在有没有关系的Transaction,则索引状态不会变更,虽然在官方文档中提到了使用:
    graph.tx().rollback()
     
    但该方法只能关闭当前事务,对系统中其他打开的事务无效,可以使用下面的语句替换:

    for(i=0;i<graph.getOpenTransactions().size();i++) {graph.getOpenTransactions().getAt(i).rollback()}

    存在幽灵实例

    使用下面的语句查询:
    mgmt = graph.openManagement()
    mgmt.getOpenInstances();
    mgmt.commit();
    使用下面的语句关闭:
    mgmt = graph.openManagement();
    ids = mgmt.getOpenInstances();
    for(String id : ids){if(!id.contains("(")){mgmt.forceCloseInstance(id)}};
    mgmt.commit();
  • 相关阅读:
    团队作业3--需求改进&系统设计
    团队作业2-《帮帮-需求规格说明书》
    团队作业1——团队展示&选题
    动态规划计算文本相似度项目—第一次个人编程作业(软件工程)
    Self Introduction&5 Questions
    团队作业6——复审与事后分析
    事后诸葛亮
    Alpha阶段项目复审
    团队作业1—团队展示&选题
    自我介绍+软工五问
  • 原文地址:https://www.cnblogs.com/jiyuqi/p/8398887.html
Copyright © 2020-2023  润新知