Использование py2neo (1.5.1) в Neo4j (1.9.2) и мне интересно, о выполнении различных команд (около 80k отношений в графике):py2neo: значения производительности и возврата различных команд
Итак, сначала я получаю все отношения (~ 80k), что, очевидно, занимает некоторое время.
graph_db = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")
rels = graph_db.match()
Однако, почему это займет значительное количество времени (~ 1-2 минуты), чтобы перебрать отношений и распечатать их (или хранить в некоторой переменной)? rels
- это список отношений, но что содержит каждое отношение?
for relation in rels:
print relation.start_node
print relation.type
print relation.end_node
print relation.get_properties()
При удалении строки print relation.get_properties()
время выполнения цикла получает гораздо лучше (~ 10 секунд). Итак, я предполагаю, что каждый relation.get_properties()
выполняет запрос к db? Звучит разумно.
Однако, связанная вещь для меня: Почему следующий код намного быстрее, хотя print relation
содержит всю необходимую информацию?
for relation in rels:
print relation #example output: (244358)-[:KNOWS {"since":2011,"reason":"unknown"}]->(244359)
print relation.start_node
print relation.type
print relation.end_node
Так печатает фактически всю информацию, мне нужно, и выполнение этого намного быстрее, несмотря на то, что, почему я не в состоянии извлечь свойства отношения и сохранить его в переменной.
for relation in rels:
print relation #example output: (244358)-[:KNOWS {"since":2011,"reason":"unknown"}]->(244359)
print relation.start_node
print relation.type
print relation.end_node
#print relation["since"] #would slow down the execution significantly, why??
Итак, какая информация хранится в отношениях? Как я могу извлечь все свойства без использования get_properties()
. Это что-то связано с кешем? Я не понимаю, это сводит меня с ума ... Я уже жду вашего ответа, Найджел ;-)
Примечание: Я знаю, что я мог бы оптимизировать его, используя партии, но это не так. действительно вопрос прямо сейчас.
EDIT:print relation["since"]
также приводит к запросу для каждой итерации?
EDIT2: И хотя мы говорим о производительности, еще одно: сравнивая следующие запросы cypher, я заметил, что первый из них медленнее, чем второй, почему? (Не выполняется на холодном графике, так что никакого влияния кэша)
Query1: START п = узел (*) ВОЗВРАТ п
Query2: START п = узел (*) ВОЗВРАТ n.name, n.age
Спасибо за ваш ответ, он мне очень помог. Несмотря на то, что я все еще интересуюсь EDIT2, так как существует такое большое различие во времени и потреблении памяти между этими двумя запросами – user2752625