簡體   English   中英

Neo4j出色的寫入性能

[英]Neo4j outrageous write performance

我正在使用新的bolt客戶端對neo4j 3.0.7進行性能測試,結果有些奇怪。 我正在嘗試一個非常簡單的方案:向上插入1000個節點(使用merge命令)。

我嘗試了幾種方法:

  1. 1個命令的1000個同步事務
  2. 1筆交易的1000命令
  3. 1個命令的1000個異步事務(使用10個線程)

這是我正在執行的查詢(我對person.id具有唯一性約束):“合並(n:person {id:'123'})SET n.name ='Diana Kesha',n.address ='aaa' ....返回n.id”

這是我的查詢的執行計划:

執行計划

結果如下:

  1. 每1000個同步事務約3秒(注意不是1000k)
  2. 每1筆交易(1000個命令)約2秒
  3. 每1000個異步事務約2.5秒

對於帶有128G RAM機的64核,絕對無法接受!

如今,不斷深入,我注意到,Neo4j的是使用10個線程時,使用1號2個選擇,和10個核心時使用的RAM 25%(我認為這是很好的),但只有1個核心。

我還注意到更改Neo4j的工作線程不會影響實際使用的內核數量。

我想念什么?

您有2個沖突的數字,您是說1000還是1000k = 1M?

2秒鍾進行1M更新是否太慢?

我建議每筆發送1k至10k更新,然后並行發送

  1. 您沒有使用參數
  2. 不要退貨
  3. 使用大寫的標簽(適應約束)

喜歡:

MERGE (n:Person {id:{id}}) 
 ON CREATE SET n.name={name} n.address={address}

最好將(2)批處理成列表參數

UNWIND {data} as row 
MERGE (n:Person {id:row.id}) 
ON CREATE SET n.name=row.name n.address=row.address

因此,測試1000個請求(並行),每個請求有1000個更新,每次發送一個包含1000個地圖的列表。

UNWIND {data} as row 
MERGE (n:Person {id:row.id}) 
ON CREATE SET n.name=row.name n.address=row.address

暫無
暫無

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

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