2015-02-24 65 views
0

我遇到以下問題。 我寫了一個查詢:Neo4j通過PHP執行查詢時速度很慢,但通過webadmin非常快速

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庫?或者你只是利用Curl? – 2015-02-24 15:40:49

+0

我使用Curl來提出請求。我用CURL請求編輯了我的問題。 – user1919 2015-02-24 15:46:31

+1

你正在使用舊的密碼端點,我想你會通過使用密碼事務端點得到更好的結果 – 2015-02-24 15:54:31

回答

2

您使用的是傳統的Cypher端點。

我建議您使用Cypher http事務端點並使用查詢參數。你

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

還可以使用像NeoClient一個PHP Neo4j的驅動程序,將刪除你捲曲的負擔,並會提供一個漂亮的響應格式化的。

+0

謝謝。但我雖然使用Transcactions來將數據上傳到數據庫(例如cretate節點等),但我現在寫了一個聲明,我得到了一些結果,但我不知道如何閱讀這個查詢的響應實際上它沒有給我任何迴應 – user1919 2015-02-24 20:37:55

+1

這就是neo4j驅動程序的幫助,查詢沒有返回任何東西,你需要提供更多的細節,比如curl請求的調試,顯示http響應的東西 – 2015-02-24 21:07:26

+0

我仍然不確定是否可以發送交易聲明來檢索數據,在文檔中沒有這樣的內容,所有示例都與創建節點有關 – user1919 2015-02-24 21:15:07

相關問題