【问题标题】:Failing to update existing vertices无法更新现有顶点
【发布时间】:2018-01-12 11:15:12
【问题描述】:

我正在更新 janusgraph 中顶点的一些属性。 可能包含多达 500000 个顶点更新。 下划线 db 是 cassandra。 在进行这些更新时,我收到以下错误:

org.apache.tinkerpop.gremlin.driver.exception.ResponseException:脚本评估超过了配置的 'scriptEvaluationTimeout' 阈值 60000000 毫秒,或者直接取消了请求 [g.V().has(IProKeys_A_ID, analysisId).has 的评估(quaPro, propValue).id()]

代码:

...
// 1. retrieve SPC property different values
        Cluster cluster = gremlinCluster.getCluster();
        Client client = null;
        List<String> propertyValues = Lists.newArrayList();
        try {
            client = cluster.connect();
            String gremlin = "g.V().has(IPr_a_ID, aId).values(qProperty).dedup()";
            Map<String, Object> parameters = Maps.newHashMap();
            parameters.put("IPr_a_ID", IPropertyKeys.ANALYSIS_ID);
            parameters.put("aId", analysisResultId);
            parameters.put("qProperty", qProperty);
            if (logger.isDebugEnabled()) logger.debug("Submiting query [ " + gremlin + " ] with binding [ " + parameters + "]");
            ResultSet resultSet = client.submit(gremlin, parameters);
            if (logger.isDebugEnabled()) logger.debug("Query finished.");
            resultSet.stream().forEach(result -> {
                String propertyValue = result.getString();
                propertyValues.add(propertyValue);
            });

        } catch
...
..
..
..
// 2. for each property value, run gremlin query to assign new grouptag property to proper vertices
        try {
            client = cluster.connect();
        for (String propValue : propertyValues) {
            String gremlin = "g.V().has(IProKeys_A_ID,analysisId).has(quaPro, propValue).property(qGtag,propValue).iterate(); return null";
            Map<String, Object> parameters = Maps.newHashMap();
            parameters.put("IProKeys_A_ID", IP_ID);
            parameters.put("analysisId", aisRId);
            parameters.put("quaPro", q_Property);
            parameters.put("qGtag", qu_dG_ptag);
            parameters.put("propValue", propValue);
            if (logger.isDebugEnabled()) logger.debug("Submiting query [ " + gremlin + " ] with binding [ " + parameters + "]");
            client.submit(gremlin, parameters).one();
            if (logger.isDebugEnabled()) logger.debug("Query finished.");
        }

能否请您告诉我出现此错误的原因?

【问题讨论】:

  • 我认为您需要提供更多信息。 propertyValues 是否包含您需要更新的 500000 个顶点?添加更多代码应该有助于澄清情况。
  • 我添加了更多信息

标签: gremlin


【解决方案1】:

很难说为什么你会遇到超时问题。我会说我注意到您从Cluster 对象创建了新的Client 实例。如果您要创建很多这些,那可能会解释一些问题(即使您每次都在Client 上调用close())。我肯定会考虑修改您的代码,只创建一次Client 并重新使用它。

此外,对于 500,000 个顶点,您可能需要查看 OLAP 方法 (hadoop/spark) 来更新那么多数据。

【讨论】:

    猜你喜欢
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2018-06-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多