Cypher的執行在缺省情況下都是單線程的。而有時,我們需要並行執行查詢,例如對一個名稱列表,查詢它們在圖中的鄰居。這裏,可以用APOC的Cypher相關過程runParallel()。
// 並行初始化並執行查詢。
// 缺省情況下,最大分區數/並行數爲CPU內核數 x 100;
// 最多批次數爲10000。例如,如果Neo4j數據庫被分配了4個內核,
// 那麼並行的最多進程數爲400。
CALL apoc.cypher.parallel(
fragment,
params,
parallelizeOn
) YIELD value
參數名 |
類型 |
缺省值 |
可爲空? |
說明 |
fragment |
字符串 |
無 |
否 |
Cypher查詢。 |
params |
MAP |
NULL |
是 |
查詢參數。 |
parallelizeOn |
字符串 |
NULL |
是 |
在params爲空時可以爲NULL。 不爲空時,該參數的值是fragment查詢語句中用來並行執行、類型爲數組的變量名。 |
我們來看個例子。下面的查詢會從名稱列表中並行取出每個姓名、搜索其鄰居,並返回姓名:
CALL apoc.cypher.parallel(
'MATCH (p:Person{name:$name}) -[:FRIEND_OF]-> (p1) RETURN p1.name AS name',
{name:['John','Mary','Peter','Wong','Chen','Lynas','Smith','Anna']},
'name'
)