[英]optimize cypher query fired from python
司機for
Neo4j的for
蟒蛇. I have a program that dynamically creates around 10-12 queries . The final result from all queries is collected in a
. I have a program that dynamically creates around 10-12 queries . The final result from all queries is collected in a
. I have a program that dynamically creates around 10-12 queries . The final result from all queries is collected in a
list中並返回。
以下是10個此類查詢:
MATCH (sslc:subSubLocality)-[:CHILD_OF]->(v4)-[:CHILD_OF]->(v3)-[:CHILD_OF]->(v2)-[:CHILD_OF]->(st:state) WHERE (st.name_wr = 'abcState') AND (sslc.name_wr= 'xyzSLC' OR sslc.name_wr= 'abcxyzcolony') RETURN st, sslc, v4, v3, v2
MATCH (slc:subLocality)-[:CHILD_OF]->(v3)-[:CHILD_OF]->(v2)-[:CHILD_OF]->(st:state) WHERE (st.name_wr = 'abcState') AND (slc.name_wr= 'xyzSLC' OR slc.name_wr= 'abcxyzcolony') RETURN st, slc, v3, v2
MATCH (loc:locality)-[:CHILD_OF]->(v2)-[:CHILD_OF]->(st:state) WHERE (st.name_wr = 'abcState') AND (loc.name_wr= 'deltax' OR loc.name_wr= 'xyzSLC' OR loc.name_wr= 'abcxyzcolony') RETURN st, loc, v2
MATCH (ct:city)-[:CHILD_OF]->(st:state) WHERE (st.name_wr = 'abcState') AND (ct.name_wr= 'deltax' OR ct.name_wr= 'abcxyz') RETURN st, ct
MATCH (sslc:subSubLocality)-[:CHILD_OF]->(v3)-[:CHILD_OF]->(v2)-[:CHILD_OF]->(ct:city) WHERE (ct.name_wr = 'deltax' OR ct.name_wr = 'abcxyz') AND (sslc.name_wr= 'xyzSLC' OR sslc.name_wr= 'abcxyzcolony') RETURN ct, sslc, v3, v2
MATCH (slc:subLocality)-[:CHILD_OF]->(v2)-[:CHILD_OF]->(ct:city) WHERE (ct.name_wr = 'deltax' OR ct.name_wr = 'abcxyz') AND (slc.name_wr= 'xyzSLC' OR slc.name_wr= 'abcxyzcolony') RETURN ct, slc, v2
MATCH (loc:locality)-[:CHILD_OF]->(ct:city) WHERE (ct.name_wr = 'deltax' OR ct.name_wr = 'abcxyz') AND (loc.name_wr= 'deltax' OR loc.name_wr= 'xyzSLC' OR loc.name_wr= 'abcxyzcolony') RETURN ct, loc
MATCH (sslc:subSubLocality)-[:CHILD_OF]->(v2)-[:CHILD_OF]->(loc:locality) WHERE (loc.name_wr = 'deltax' OR loc.name_wr = 'xyzSLC' OR loc.name_wr = 'abcxyzcolony') AND (sslc.name_wr= 'xyzSLC' OR sslc.name_wr= 'abcxyzcolony') RETURN loc, sslc, v2
MATCH (slc:subLocality)-[:CHILD_OF]->(loc:locality) WHERE (loc.name_wr = 'deltax' OR loc.name_wr = 'xyzSLC' OR loc.name_wr = 'abcxyzcolony') AND (slc.name_wr= 'xyzSLC' OR slc.name_wr= 'abcxyzcolony') RETURN loc, slc
MATCH (sslc:subSubLocality)-[:CHILD_OF]->(slc:subLocality) WHERE (slc.name_wr = 'xyzSLC' OR slc.name_wr = 'abcxyzcolony') AND (sslc.name_wr= 'xyzSLC' OR sslc.name_wr= 'abcxyzcolony') RETURN slc, sslc
查詢可能會根據輸入字典進行更改(正如我提到的,查詢是在運行時創建的)。 但是查詢共享相同的結構。
下面是我得到的一個Query Plan
,它對所有查詢都保持相同,只是內部值不同。
以下是觸發這些請求的代碼:
def get_query_response(query_list: list)-> list:
driver = GraphDatabase.driver(uri, auth=("neo4j", "neo4j"))
with driver.session() as session:
with session.begin_transaction() as tx:
response = [record.values() for query in query_list for record in tx.run(query)]
return response
query_list
是具有這些查詢的str
的集合。
問題是整個任務需要2秒鍾才能做出響應。 有什么方法可以優化查詢或使其更快,或者可以在幾毫秒內運行?
要回答幾個問題:
10ms
3ms
10ms
。 當我在neo4j
桌面上neo4j
查詢時。 是引起問題的驅動程序嗎? i7 16GB Memory with 1TB SSD
indeices
,但500ms
的性能卻有所提高,但是現在是1.5s
,有什么辦法可以使它在毫秒內工作嗎? 我不能確定原因是什么,但是我有幾個問題可以幫助我們更接近答案。
•您是否嘗試過分別對這些查詢進行基准測試? 乍一看,它們看起來很簡單,可以完成,所以我不認為這是問題所在,但是知道您是否真的需要自己優化查詢也不會有任何問題。
•您提到需要2秒鍾,或者是從您單擊“輸入”以執行Python腳本起(因此包括了啟動與Neo4j實例的連接之類的事情),或者是專門花了2.0秒鍾進行查詢執行?
• 文檔指出,在Neo4j v3.2之前,Cypher規划器並非總是做出最有效的選擇。 如果您使用的是較早的版本,則文檔中會提到您應默認使用基於成本的計划程序。
•這是本地Neo4j實例嗎? 如果是托管主機,則主機的硬件規格是什么? 如果可能的話,提高規格可能不會受到傷害。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.