【发布时间】:2019-08-21 17:55:36
【问题描述】:
我正在使用 JanusGraph 来存储和检索由边连接的顶点对。
插入超过 100k 对顶点后,我发现当我尝试遍历并从中检索顶点时,大约 5% 的顶点对出现NullPointerException 错误。我在下面包含了错误的堆栈跟踪。
对于受影响的顶点对,每次我尝试遍历它时都会出现NullPointerException。
我的问题是:这些NullPointerExceptions 可能是什么原因造成的?
其他信息:
- 我使用 Cassandra 作为后端存储 (
cql) - 我在顶点上使用 ID 属性作为唯一索引
- 我正在使用 JanusGraph
0.2.0版本
编辑:我还想补充一点,每对的两个顶点都存在于图中,我什至可以读取每个顶点的属性。
这是错误堆栈跟踪的相关部分:
Caused by: java.lang.NullPointerException
at org.janusgraph.graphdb.database.serialize.AttributeUtil.hasGenericDataType(AttributeUtil.java:99)
at org.janusgraph.graphdb.database.EdgeSerializer.readPropertyValue(EdgeSerializer.java:197)
at org.janusgraph.graphdb.database.EdgeSerializer.readInline(EdgeSerializer.java:189)
at org.janusgraph.graphdb.database.EdgeSerializer.parseRelation(EdgeSerializer.java:161)
at org.janusgraph.graphdb.database.EdgeSerializer.readRelation(EdgeSerializer.java:73)
at org.janusgraph.graphdb.transaction.RelationConstructor.readRelationCache(RelationConstructor.java:41)
at org.janusgraph.graphdb.relations.CacheEdge.getPropertyMap(CacheEdge.java:107)
at org.janusgraph.graphdb.relations.CacheEdge.getValueDirect(CacheEdge.java:114)
at org.janusgraph.graphdb.relations.AbstractTypedRelation.lambda$properties$1(AbstractTypedRelation.java:157)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
at java.util.stream.StreamSpliterators$WrappingSpliterator.lambda$initPartialTraversalState$0(StreamSpliterators.java:294)
at java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.fillBuffer(StreamSpliterators.java:206)
at java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.doAdvance(StreamSpliterators.java:161)
at java.util.stream.StreamSpliterators$WrappingSpliterator.tryAdvance(StreamSpliterators.java:300)
at java.util.Spliterators$1Adapter.hasNext(Spliterators.java:681)
以下是我为图遍历实现的相关代码:
g.V()
.has(indexProperty, vertexId)
.coalesce(
__.repeat(__
.bothE()
.or(
__.has(GraphElementProperties.WEIGHT, P.gte
(STRONG_CONNECTION_WEIGHT_THRESHOLD)),
__.hasNot(GraphElementProperties.WEIGHT)
)
.bothV()
.dedup())
.emit(),
__.identity()
)
.toList()
【问题讨论】:
-
我们也面临这个问题,你有什么解决办法吗?
标签: java graph-databases gremlin janusgraph graph-traversal