有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在运行时使用neo4j创建连接数据,每天的数据量为10.2亿个节点

在我的java应用程序中,我从kafka读取事件,并将其作为节点插入neo4j数据库。我预计每天大约有1000-1500万个节点

节点的主要属性是事件{uniqueId,id1,id2,id3,id4,eventTime,其他属性…}

在插入1批节点(每批200个事件,大约需要150毫秒)之后,我调用一个密码查询,根据这些ID创建与过去1天中任何匹配事件的关系。 一个事件可以连接到多个事件

所有ID都是UUID的格式,我已经为uniqueId创建了唯一约束,并在id1、id2、id3、id4eventTime上创建了索引

我的示例查询(针对id1)如下所示,uniqueIdList是当前批处理事件的唯一ID:

CALL apoc.periodic.iterate(" 'MATCH (c:EVENT) WHERE c.uniqueId IN {uniqueIdList} with c " + 
" MATCH (p:EVENT) WHERE p.eventTime > (timestamp() - 86400000 ) AND (p.id1 = c.id1) return p,c "+
" '," + 
" 'MERGE (p)-[:RELATED_TO]-(c) ',"+
" {batchSize:1000, parallel:false, params:{ uniqueIdList:{uniqueIdList} } })

我在没有apoc的情况下尝试了上述查询。周期性迭代,但性能没有显著变化

另外,由于我的数据在60天内就过时了,所以我每天都使用apoc运行一个密码查询。周期性提交删除所有超过60天的节点和关系

我正在服务器模式下使用neo4j 3.2.6。在我的测试中,我每天只能处理大约200万个事件。有什么方法可以提高绩效吗

下面是解释查询Explain Query的输出


共 (0) 个答案