getProperty()在Neo4j中变得越来越慢
我的目标是迭代一个节点的所有关系,并打印出每个关系的一个特定属性。我的节点有很多关系,只有几十万个。我的迭代在迭代循环中越来越慢。有人能对我的代码提出建议或意见吗?提前谢谢你getProperty()在Neo4j中变得越来越慢,neo4j,Neo4j,我的目标是迭代一个节点的所有关系,并打印出每个关系的一个特定属性。我的节点有很多关系,只有几十万个。我的迭代在迭代循环中越来越慢。有人能对我的代码提出建议或意见吗?提前谢谢你 Node _node = sHelper.getNodeById(id); if (_node != null) { try (Transaction tx = graphDB.beginTx()) { if (_node.hasProperty("PublicKey
Node _node = sHelper.getNodeById(id);
if (_node != null) {
try (Transaction tx = graphDB.beginTx()) {
if (_node.hasProperty("PublicKey")) {
try {
double coin = 0;
BufferedWriter writer = new BufferedWriter(new FileWriter("./"+id+"_balance.txt"));
//Iterator<Relationship> rels = _node.getRelationships(Direction.INCOMING).iterator();
int kk = 0;
for(Relationship rel : _node.getRelationships(Direction.INCOMING)){
//Relationship rel = rels.next();
coin = (double) rel.getProperty("Bitcoin");
if((kk++)%10000==0){
System.out.println(appr+"\t"+coin);
}
}
kk=0;
//rels = _node.getRelationships(Direction.OUTGOING).iterator();
for(Relationship rel : _node.getRelationships(Direction.OUTGOING)){
//Relationship rel = rels.next();
coin = (double) rel.getProperty("Bitcoin");
if((kk++)%10000==0){
System.out.println(coin);
}
}
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
} else {
}
tx.success();
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("INVALID NODE ID!");
}
如果您试图绘制每日余额,那么您不需要检索曾经存在的所有关系。我将用密码回答,因为这是我所知道的全部: 给定日期的交易总额:
MATCH (a:Address) WHERE ID(a) = 12345
MATCH (a)-[s:SENT]->()
WHERE s.timestamp >= tsStartOfDay AND s.timestamp <= tsEndOfDay
WITH a, SUM(s.coin) as sent
MATCH (a)<-[r:RECEIVE]-()
WHERE r.timestamp >= tsStartOfDay AND r.timestamp <= tsEndOfDay
RETURN SUM(r.coin) - sent
如果您已经对大量数据进行了建模,但没有运行总计,则可以运行查询,根据所有现有数据将其添加到每个地址节点中。我假设您将所有这些值合并为一个钱包或帐户的总数,然后您可以对每个地址节点的余额属性求和
注意:在双精度变量中存储值时要小心,特别是在处理比特币的分数性质时,可能会出现舍入错误。您能告诉我们您想要实现什么吗?我相信traversal API比Cypher更快,但是通过查询,无论是聚合还是分页结果,您都可以很容易地实现所需的功能。对于我的图表中的每个关系,我还有一个时间戳,它表示发送或接收的比特币数量。我想要实现的是绘制这个节点的每日余额。
MATCH (a:Address) WHERE ID(a) = 12345
CREATE a<-[:RECEIVE{coin:0.01}]-(howeverYouModelFromNode)
SET a.balance = a.balance + 0.01