Я также видел ваш вопрос в группе Neo4j Google и спросил, можете ли вы измерить в PHP время выполнения, если вместо использования
эхо $row['n']->getProperty('имя') . "\п";.
ты используешь
print_r ($ результат);
Позвольте мне объяснить ниже, почему. Когда я начал экспериментировать с Neo4j и PHP, у меня были некоторые опасения по поводу эффективности PHP с точки зрения скорости. Я воссоздал вашу проблему так. Сначала я создал 200 случайных узлов. Каждый узел имеет метку, 10 свойств, и каждое свойство имеет значение 10 символов. Это сценарий, который я использовал.
for ($x=1; $x<=200; $x++)
{
$queryString = "CREATE (n:User { name : '".substr(md5(rand()), 0, 10)."' , city : '".substr(md5(rand()), 0, 10)."' , date : '".substr(md5(rand()), 0, 10)."', age : '".substr(md5(rand()), 0, 10)."', country : '".substr(md5(rand()), 0, 10)."', language : '".substr(md5(rand()), 0, 10)."', origin : '".substr(md5(rand()), 0, 10)."', preference : '".substr(md5(rand()), 0, 10)."', color : '".substr(md5(rand()), 0, 10)."', graduate : '".substr(md5(rand()), 0, 10)."'})";
$query = new Everyman\Neo4j\Cypher\Query($client, $queryString);
$result = $query->getResultSet();
}
Используя цикл foreach, я получил такой же результат, как и вы.
foreach ($result as $row) {
echo $row['n']->getProperty('name') . "\n";
}
и я измерил время выполнения с помощью этого кода
$time_start = microtime(true);
$queryString = "MATCH (n) RETURN n";
$query = new Everyman\Neo4j\Cypher\Query($client, $queryString);
$result = $query->getResultSet();
foreach ($result as $row) {
echo $row['n']->getProperty('name') . "\n";
}
$time_end = microtime(true);
$execution_time = ($time_end - $time_start)*1000;
//execution time of the script
echo '<b>Total Execution Time:</b> '.$execution_time.' ms';
С 200 узлами я получил как на webadmin, так и на php около 85 мс. Объема данных недостаточно для получения точных результатов, поэтому я увеличил свои узлы до 500. Время выполнения увеличилось до 115 мс как для веб-админа, так и для php-скрипта. При увеличении количества узлов до 2000 у меня было время выполнения 200 мс, но существенных различий между webadmin и php не было. Наконец, я увеличил свои узлы до 10000. Хорошо, теперь у нас есть некоторые результаты. Webadmin возвращает мне 10000 узлов за 1020 мс. Но Php слишком медленный.
Общее время выполнения: 1635,6329917908 мс
Я думаю, это не то, чего я ожидаю. Вместо использования метода $row['x'] я печатаю результаты и время, увеличенное до
Общее время выполнения: 2452,4049758911 мс
Итак, я думаю, давайте не будем печатать все свойства на экране, а просто вернем узлы и количество (n) и посмотрим, что у нас есть, если мы напечатаем количество каждого из них, которое будет «1».
$queryString = "MATCH (n) RETURN n AS n, count(n) AS x";
$query = new Everyman\Neo4j\Cypher\Query($client, $queryString);
$result = $query->getResultSet();
foreach ($result as $row) {
echo $row['x'];
}
Результат приведенного выше кода будет примерно таким.
1111111111111111111111...... Общее время выполнения: 1084,1178894043 мс
Как вы можете видеть, php и webadmin возвращают 10000 результатов за одно и то же время (для 10000 узлов я не думаю, что 60 мс являются большой разницей), и завершаю свой большой ответ следующим:в php и Neo4j мы не теряем время для извлечения большого объема данных, но мы теряем много времени, чтобы отобразить эти данные в нашем браузере из PHP.
person
SotirisTsartsaris
schedule
28.01.2014