无法更新现有顶点

时间:2018-01-12 11:15:13

标签: gremlin

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

org.apache.tinkerpop.gremlin.driver.exception.ResponseException:脚本评估超出配置的'scriptEvaluationTimeout'阈值60000000 ms或者直接取消评估请求[gV()。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.");
        }

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

1 个答案:

答案 0 :(得分:1)

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

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