2014-10-27 2 views
1

У меня есть сценарий, как показано ниже:Neo4j повышение производительности записи

CREATE (p:Person{guid:1}) 
CREATE (b1:Book{guid:1}) 
CREATE (b2:Book{guid:2}) 
CREATE (b3:Book{guid:3}) 

MATCH (p:Person{guid:1}),(b1:Book{guid:1}) CREATE (p)-[:READ]->(b1) 
MATCH (p:Person{guid:1}),(b2:Book{guid:2}) CREATE (p)-[:READ]->(b2) 
MATCH (p:Person{guid:1}),(b3:Book{guid:3}) CREATE (p)-[:READ]->(b3) 

В настоящее время выше Cypher запросов выполняются последовательно. Мне нужно улучшить производительность моих операций записи.

Я думаю, что создание p, b1, b2, b3 может происходить параллельно. Как только это будет сделано, соединение между p и b1, b2 и b3 может происходить параллельно. Кроме того, я думаю, что над запросами может работать только одна партия вместо отдельных операций записи.

Я использую neo4jphp и узла-Neo4j.

думаю есть Transactional Cypher HTTP endpoint и Batch operations. Улучшают ли они производительность записи? Что из этого лучше для вышеуказанного случая?

Похоже, neo4jphp поддерживает пакетные операции и операции cypher. Но не уверен, можно ли выполнить транзакции пакет/cypher в node-neo4j.

ответ

1

Вы должны использовать параметризованный Cypher, чтобы удалить накладные расходы для разбора заявления и составления плана запроса.

В вашем случае заявление может быть изменено на:

MERGE (p:Person{guid:{personGuid}}) 
MERGE (b:Book{guid:{bookGuid}}) 
CREATE (p)-[:READ]->(b) 

и поставки в качестве параметров:

{ "personGuid": 1, "bookGuid": 1 } 
{ "personGuid": 1, "bookGuid": 2 } 
{ "personGuid": 1, "bookGuid": 3 } 

Ве обязательно иметь индексы:

CREATE INDEX ON :Person(guid) 
CREATE INDEX ON :Book(guid) 

Использование транзакций конечной точки попытайтесь объединить базовые операции ~ 10k-50k в одну транзакцию, чтобы иметь хороший баланс между памятью потребления и транзакционных издержек.

+0

Большое вам спасибо. У меня есть еще одно сомнение: мои запросы на запись описаны здесь: https://onedrive.live.com/redir?resid=879CBF0D0A286E6D%21113 Как объединить эти запросы и сделать одну операцию записи? –