Neo4j очень медленный при выполнении запроса через PHP, но очень быстрый через webadmin

0

У меня есть следующая проблема. Я написал запрос:

  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
    как вы отправляете свой запрос в Php? Вы используете драйвер, как neoclient? Вы используете библиотеку http, как жрет? или вы просто используете керл?
  • 0
    Я использую Curl, чтобы сделать запрос. Я отредактировал свой вопрос с помощью запроса CURL.
Показать ещё 3 комментария
Теги:
neo4j

1 ответ

2
Лучший ответ

Вы используете устаревшую конечную точку Cypher.

Я рекомендую использовать транзакционную конечную точку Cypher http и использовать параметры запроса.

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

Также вы можете использовать драйвер php neo4j, такой как NeoClient, который избавит вас от бремени и предоставит довольно ответный форматтер.

  • 0
    Благодарю. Но я использую Transcactions только для загрузки данных в БД (например, для создания узлов и т. Д.). Теперь я написал заявление о том, что я получаю некоторые результаты, например, но я не знаю, как прочитать ответ на такой запрос. На самом деле это ничего мне не возвращает!
  • 1
    Вот где драйвер neo4j поможет. Для запроса, не возвращающего ничего, вам нужно будет предоставить более подробную информацию, такую как отладка запроса curl, что показывает ответ http
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню