我也在 Neo4j Google Group 中看到了你的问题,我问你是否可以在 PHP 中测量执行时间,而不是使用
回声 $row['n']->getProperty('name') 。“\n”;。
你用
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 个。webadmin 和 php 脚本的执行时间都达到了 115 毫秒。将我的节点增加到 2000 我有 200 毫秒的执行时间,但 webadmin 和 php 之间没有显着差异。最后,我的节点数达到了 10000。好的,现在我们有了一些结果。Webadmin 在 1020 毫秒内返回给我 10000 个节点。不过php太慢了。
总执行时间:1635.6329917908 ms
我认为这不是我所期望的。而不是使用 $row['x'] 方法我 print_r 结果和时间增加到
总执行时间: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 ms
如您所见,php 和 webadmin 同时返回 10000 个结果(对于 10000 个节点,我认为 60 毫秒不是主要区别)并以此结束我的重要答案:在 php 和 Neo4j 中,我们不会浪费时间来检索大量数据,但我们浪费了很多时间从 PHP 在浏览器上呈现这些数据。