今天,我写了第一个基本程序Neo4j的从PHP。 这基本上做检查,如果我们可以通过使用Neo4jPhp在我们的新项目中使用的Neo4j从PHP。 https://github.com/jadell/neo4jphp
这里是我的代码
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
include 'neo4jphp.phar';
echo "Hello World!";
// Connecting to the default port 7474 on localhost
$client = new Everyman\Neo4j\Client();
$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";
}
?>
</body>
</html>
现在,这里我只是检索所有节点与他们的财产。 很简单。
如果我从Neo4j的图形控制台运行它,它需要86毫秒。 我只有200个节点,几乎相同的属性。
match (n)
return n
Returned 50 rows in 86 ms
如果我从上面的PHP文件运行它,它需要2-4秒的总浏览器转储数据。 Neo4j的是在同一台机器上运行。
请注意,我没有做过PHP和的Neo4j的配置进行任何更改。 一切都是默认的。 请告诉我,如果这是Neo4j的与PHP或什么预期的行为是真的错了我的代码或配置。
非常感谢
我已经看到了Neo4j的谷歌集团的问题还有,我问,如果你能在PHP中测量的执行时间,如果不是使用
回声$行[ 'N'] - >的getProperty( '姓名')。 “\ n” 个;.
你用
的print_r($结果);
让我在下面解释为什么。 当我开始玩弄的Neo4j和PHP我有超过PHP的有效性一些顾虑在速度方面。 我重新像这样您的问题。 首先,我创建了200个随机节点。 每个节点都有一个标签,10点的属性和每个属性具有10个字符的数值。 这是TE剧本我使用。
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的和周围的85ms PHP了。 数据量是不够的,得到准确的结果,所以我增加了我的节点500执行一次上升到115ms的WebAdmin的和PHP脚本两者。 增加我的节点到2000年我有200ms的执行时间,但WebAdmin的和PHP之间没有显著差异。 最后,我得到了我的节点高达10000好了,现在我们有一些结果。 网站管理返回到我1020ms 10000个节点。 PHP是太慢虽然。
执行时间总计:1635.6329917908毫秒
我觉得这不是我所期望的。 而不是使用$行[“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毫秒
正如你可以看到PHP和网站管理的同时返回10000项(10000个节点我不认为60毫秒是一个主要的区别),并得出结论:我的大答案有这样的 : 在PHP和Neo4j的我们没有松动的时间来检索大量的数据,但我们失去了很多的时间来渲染我们从PHP浏览器这个数据。
你可以调试和测量REST请求Neo4j的服务器实际上正在采取什么? 它应该像86ms,剩下的应该是在PHP代码? 另外,请使用参数,使您不必创建重复暗号查询的查询计划的开销。