簡體   English   中英

更快地將大型(700萬行)csv文件導入Neo4j

[英]Import a large (7 million rows) csv file into Neo4j faster

這是我在stackoverflow中的第一個問題。

我想在Neo4j數據庫中導入700萬行文件。

每行都有一個節點的信息,一個時間值(已經在數據庫中)。 對於每一行,我需要在數據庫中找到一個現有節點和一個現有時間值,然后在它們之間創建一個關系,並在其中添加值。

我想要一些建議以提高導入速度。 該架構為:

ON :Day(value)        ONLINE  
ON :Month(value)      ONLINE  
ON :SEGMENT(LinkName) ONLINE  
ON :Timeperiod(value) ONLINE  
ON :Year(value)       ONLINE  

我大約需要24小時才能導入大約200萬行。 (1/3)我希望導入50個類似的文件,因此我認為我需要更好的代碼來提高速度。 分配的內存為1GB(默認設置),硬盤為SSD。

非常感謝!

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///../../Python/MAR15.csv" AS row WITH row
WHERE row.LinkRef IS NOT NULL
WITH row, toInt(SUBSTRING(row.Date, 0, 4)) AS y
MATCH (year:Year {value: y})
WITH row, year, toInt(SUBSTRING(row.Date, 5, 2)) AS m
MATCH (year)-[:CONTAINS]->(month:Month {value: m})
WITH row, month, toInt(SUBSTRING(row.Date, 8, 2)) AS d
MATCH (month)-[:CONTAINS]->(day:Day {value: d})
WITH row, day, toInt(row.TimePeriod) AS t
MATCH (day)-[:CONTAINS]->(timeperiod:Timeperiod {value: t}) 
##96 period per day, each period is 15 minutes
WITH row, timeperiod
MATCH(segment:SEGMENT {LinkRef: row.LinkRef})


CREATE (segment)-[trafficdata:TrafficData {
    AverageJT: row.AverageJT,
    AverageSpeed: row.AverageSpeed,
    Flow: row.Flow,
    DataQuality: row.DataQuality
    }]->(timeperiod)
SET segment.LinkLength = row.LinkLength;

正如Ryan所建議的那樣,我通過以下代碼提高了查詢速度:

CREATE CONSTRAINT ON (segment:SEGMENT) ASSERT segment.LinkRef IS UNIQUE

由於每個SEGMENT都有一個唯一的標識符(LinkRef),因此系統能夠更快地執行MATCH檢查。 添加此約束后,系統每分鍾可以處理10,000多個輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM