Neo4j 在通过 PHP 执行查询时非常慢,但通过 webadmin 执行查询时非常快
Neo4j very slow when executing query through PHP but very fast through webadmin
我有以下问题。
我写了一个查询:
MATCH (n:RealNode {gid:'58687'})-[:CONTAINS*..15]-(z) RETURN DISTINCT ID(z), z.id,n.id as InternalID
我 运行 通过 PHP 脚本(通过发送 POST 请求)。需要很长时间才能得到响应,有时 neo4j 会挂起。
我在 Neo4j webadmin 中尝试了相同的查询,并在毫秒内得到了响应。
知道为什么在第一种情况下响应需要这么长时间吗?
已编辑
这是使用 CURL 的请求:
$obj_id = $_POST['datastr'];
$dataArr = array("query" => "MATCH (n {gid:'$obj_id'})-[:CONTAINS*..15]-(z) RETURN DISTINCT ID(z), z.id,n.id as InternalID");
$data = json_encode($dataArr);
$curl=curl_init();
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Accept: application/json; charset=UTF-8','Content-Type: application/json','Content-Length: ' . strlen($data),'X-Stream: true'));
curl_setopt($curl, CURLOPT_URL, 'http://localhost:7474/db/data/cypher/');
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); //type of request
curl_setopt($curl, CURLOPT_POSTFIELDS,$data); // data to post
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // return response as string
$response = curl_exec($curl);
echo $response;
curl_close($curl);
您正在使用旧版 Cypher 端点。
我建议您使用 Cypher http 事务端点并使用查询参数。
http://neo4j.com/docs/stable/rest-api-transactional.html
您还可以使用像 NeoClient 这样的 php neo4j 驱动程序,这将减轻您的 curl 负担并提供漂亮的响应格式化程序。
我有以下问题。 我写了一个查询:
MATCH (n:RealNode {gid:'58687'})-[:CONTAINS*..15]-(z) RETURN DISTINCT ID(z), z.id,n.id as InternalID
我 运行 通过 PHP 脚本(通过发送 POST 请求)。需要很长时间才能得到响应,有时 neo4j 会挂起。 我在 Neo4j webadmin 中尝试了相同的查询,并在毫秒内得到了响应。
知道为什么在第一种情况下响应需要这么长时间吗?
已编辑 这是使用 CURL 的请求:
$obj_id = $_POST['datastr'];
$dataArr = array("query" => "MATCH (n {gid:'$obj_id'})-[:CONTAINS*..15]-(z) RETURN DISTINCT ID(z), z.id,n.id as InternalID");
$data = json_encode($dataArr);
$curl=curl_init();
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Accept: application/json; charset=UTF-8','Content-Type: application/json','Content-Length: ' . strlen($data),'X-Stream: true'));
curl_setopt($curl, CURLOPT_URL, 'http://localhost:7474/db/data/cypher/');
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); //type of request
curl_setopt($curl, CURLOPT_POSTFIELDS,$data); // data to post
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // return response as string
$response = curl_exec($curl);
echo $response;
curl_close($curl);
您正在使用旧版 Cypher 端点。
我建议您使用 Cypher http 事务端点并使用查询参数。
http://neo4j.com/docs/stable/rest-api-transactional.html
您还可以使用像 NeoClient 这样的 php neo4j 驱动程序,这将减轻您的 curl 负担并提供漂亮的响应格式化程序。