通过PHP执行查询时Neo4j非常慢,但通过webadmin非常快

时间:2015-02-24 15:20:42

标签: php neo4j

我有以下问题。 我写了一个查询:

  MATCH (n:RealNode {gid:'58687'})-[:CONTAINS*..15]-(z) RETURN DISTINCT ID(z), z.id,n.id as InternalID

我通过PHP脚本运行(通过发送POST请求)。获得响应需要很长时间,有时neo4j会挂起。 我在Neo4j webadmin中尝试了相同的查询,我得到了ms的响应。

任何想法为什么在第一种情况下响应会花费这么多时间?

EDITED 这个请求使用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);

1 个答案:

答案 0 :(得分:2)

您正在使用传统的Cypher端点。

我建议您使用Cypher http事务端点并使用查询参数。

http://neo4j.com/docs/stable/rest-api-transactional.html

此外,您可以使用像NeoClient这样的php neo4j驱动程序,它可以消除你卷曲的负担,并提供一个漂亮的响应格式化程序。