NEO4J 查询优化 -- TimeTree

时间:2020-12-26 13:24:55

标签: neo4j

为了创建一个时间树,我想使用这个语句:

    WITH range(2020,2021) AS years, range(1,12) as months, range(0,24) as hours, range(1,60) as minutes, range(1,60) as seconds
MERGE (tr:timeRoot {name: "timeRoot"})
FOREACH(year IN years | 
  MERGE (y:calYear {name: year})
  MERGE (tr)-[:HAS_YEAR]->(y)
  FOREACH(month IN months | 
    CREATE (m:calMonth {name: month})
    MERGE (y)-[:HAS_MONTH]->(m)
    FOREACH(day IN (CASE 
                      WHEN month IN [1,3,5,7,8,10,12] THEN range(1,31) 
                      WHEN month = 2 THEN 
                        CASE
                          WHEN year % 4 <> 0 THEN range(1,28)
                          WHEN year % 100 <> 0 THEN range(1,29)
                          WHEN year % 400 <> 0 THEN range(1,29)
                          ELSE range(1,28)
                        END
                      ELSE range(1,30)
                    END) |      
      CREATE (d:calDay {name: day})
      MERGE (m)-[:HAS_DAY]->(d)
        FOREACH(hour IN hours | 
        CREATE (h:calHour {name: hour})
        MERGE (d)-[:HAS_HOUR]->(h)
            FOREACH(minute IN minutes | 
            CREATE (mi:calMin {name: minute})
            MERGE (h)-[:HAS_MINUTE]->(mi)
                FOREACH(second IN seconds | 
                CREATE (sec:calSec {name: second})
                MERGE (mi)-[:HAS_SECOND]->(sec)
            )
        )
      )
    )
  )
)

在 conf 文件中,内存的所有设置都是默认的,并且是推荐的。

当我遇到错误时,我的查询似乎搞砸了:

Neo.DatabaseError.Statement.ExecutionFailed Java heap space

当我减少要生成的节点数量时,它会起作用。数据库是空的,我希望它可以处理 1 个以上的 mio 节点。也许有人暗示如何调整查询或设置以允许生成甚至 10 年的时间树?

neo4j-db 的版本为 4.2.1,并在具有 12 GB 内存的 Windows 服务器上运行。

谢谢

0 个答案:

没有答案