在运行时在neo4j中创建连接数据,每天节点数量为1000万到2000万

时间:2018-01-18 12:10:28

标签: java neo4j cypher

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

节点的主要属性是 EVENT {uniqueId,id1,id2,id3,id4,eventTime,other-properties ...}

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

所有ID都是UUIDS的格式,我为 uniqueId id1,id2,id3 id4 eventTime 上的索引创建了唯一约束

我的示例查询(对于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.periodic.iterate 的情况下尝试了上面的查询,但性能没有显着变化。

此外,由于我的数据在60天内变得陈旧,所以我每天运行一个密码查询,使用apoc.periodic.commit来删除超过60天的所有节点和关系。

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

以下是查询Explain Query

的EXPLAIN输出

0 个答案:

没有答案