有沒有人使用紅寶石neo4j-core來批量處理數據?具體來說,我在看從關係數據庫採取在500K左右線,並通過類似於插入它們:紅寶石neo4j核心批量處理數據
Neo4j::Session.current.transaction.query
.merge(m: { Person: { token: person_token} })
.merge(i: { IpAddress: { address: ip, country: country,
city: city, state: state } })
.merge(a: { UserToken: { token: token } })
.merge(r: { Referrer: { url: referrer } })
.merge(c: { Country: { name: country } })
.break # This will make sure the query is not reordered
.create_unique("m-[:ACCESSED_FROM]->i")
.create_unique("m-[:ACCESSED_FROM]->a")
.create_unique("m-[:ACCESSED_FROM]->r")
.create_unique("a-[:ACCESSED_FROM]->i")
.create_unique("a-[:ACCESSED_FROM]->r")
.create_unique("i-[:IN]->c")
.exec
但是這樣做在本地花費小時數十萬的事件。到目前爲止,我已經嘗試過以下幾種:
- 包裝Neo4j :: ConnectionPool中的連接和多線程 - 我在這裏沒有看到很多速度的改進。
- 做
tx = Neo4j::Transaction.new
和tx.close
每1000個事件處理 - 看着一個TCP轉儲,我不確定這實際上做我的預期。它以相同的頻率完成相同的請求,但只是具有不同的響應。
用的Neo4j ::交易我看到一個貼子每次.query(...).exec
被稱爲時間:
- 請求:
{"statements":[{"statement":"MERGE (m:
人{token: {m_Person_token}}) ...{"m_Person_token":"AAA"...,"resultDataContents":["row","REST"]}]}
- 響應:
{"commit":"http://localhost:7474/db/data/transaction/868/commit","results":[{"columns":[],"data":[]}],"transaction":{"expires":"Tue, 10 May 2016 23:19:25 +0000"},"errors":[]}
隨着非Neo4j的: :交易我看到相同的POST頻率,但是這個數據:
- 請求:
{"query":"MERGE (m:
人{token: {m_Person_token}}) ... {"m_Person_token":"AAA"..."c_Country_name":"United States"}}
- 響應:
{"columns" : [ ], "data" : [ ]}
(不知道這是預期的行爲,但它看起來像較少的數據通過非Neo4j的傳輸::交易技術 - 高度可能是我我做錯了什麼)
我有一些其他的想法: *後處理成CSV,SCP up,然後使用neo4j-import
命令行實用程序(雖然,這似乎有點hacky)。 *結合我上面嘗試的兩種技巧。
有沒有其他人遇到這個/有其他建議嗎?