2016-02-29 101 views
2

最近,我被賦予了研究和提供NoSQL數據庫效果概念證明的任務。我選擇了Neo4j作爲這個.NET應用程序的NoSQL數據庫。爲什麼查詢速度比Neo4j客戶端慢10倍?

事情是......當我使用Neo4j客戶端執行查詢時,它運行在10-20毫秒內,這太棒了。每當我通過代碼執行該查詢時,需要150-200毫秒,這是巨大的差異。

查詢如下(一個銀行數據庫的荷蘭當量)

我要實現的是讓每家銀行都與他們的子女(要獲得整個層次)的目標是:

MATCH (bank:Bank)-[:PARENT_OF]->(bank2:Bank) Return (bank.id),collect(bank2.id)

這是我用來執行查詢的代碼。

var query = client.Cypher.Match("(bank:Bank)-[:PARENT_OF]->(child:Bank)") 
      .Return((bank, child) => new 
      { 
       Bank = bank.As<Bank>(), 
       Children = child.CollectAs<Bank>() 
      }); 
     var list = query.Results 

我的問題是:爲什麼查詢速度慢10倍,而不是Neo4j客戶端?

+0

您也可以只發出原始網頁請求獲取通過交易終端的基礎數據,你將不得不解析JSON自己。還有一些其他的.Net驅動程序,它們只是http端點周圍的精簡包裝。 –

回答

3

我認爲你正在比較網絡版本?

使用客戶端有很多開銷 - 諸如OGM(對象圖映射)之類的東西耗盡了一些性能,然後你必須增加諸如實際HTTP調用之類的開銷。

網絡上的客戶端(localhost:7474)不必與此競爭。

您可能還注意到,Web客戶端顯示不同的東西 - API返回的是而不是。我想你會看到一個圖表,顯示所有Bank都與良好的關係結合在一起 - 如果您運行查詢並查看REST響應 - 您會注意到那裏沒有關係數據,所以它必須調用其他的東西。

我知道這是不是一個理想的答案:/

+0

您對與網頁版本的比較是正確的。 這是我已經假設的答案,但並不確定。有足夠的細節讓我對答案感到滿意。事實上,Web客戶端顯示關係,其餘響應不包含此類數據。 感謝您的回答。我希望這是我的問題,而不是外部因素。 – Daniel

相關問題