簡體   English   中英

Neo4j的表現

[英]Performance in Neo4j

我有一個2.217.731節點和3.127.475關系的數據庫,其中節點是不同的設備,它們之間的關系就像“CONNECTED_TO”,“IS_INSIDE”等。

我試圖遍歷圖表以查找特定節點。 在Cypher看起來像

    MATCH (n:Equipment)<-[IS_INSIDE*]-()<-[CONNECTED_TO*]-(m:Cable) where n.name = "name" RETURN m

使用Java Core API,我知道這應該是查詢Neo4j並花費幾秒鍾的最快方法,但它運行了幾十分鍾。

我正在使用neo4j-2.0.0和java版本“1.7.0_45”,最大Java堆大小7演出

Neo4j屬性:

    Map<String, String> config = new HashMap<>();

    config.put( "neostore.nodestore.db.mapped_memory", "1800M" );
    config.put( "neostore.relationshipstore.db.mapped_memory", "3G" );
    config.put( "neostore.propertystore.db.mapped_memory", "100M" );
    config.put( "neostore.propertystore.db.strings.mapped_memory", "150M" );
    config.put( "neostore.propertystore.db.arrays.mapped_memory", "10M" );

    inserter = BatchInserters.inserter("target/graphDb", config);

我是Neo4j的新手,不知道如何調整它以獲得更好的性能。

如果你必須遍歷整個圖表,那么這將是緩慢的。 如果這是一個常見的查詢,請考慮在Equiptment.name上創建索引,這在neo4j 2.0.0里程碑中是可能的。 然后它將只查找索引中的匹配名稱(基本上是哈希表),然后檢查匹配節點周圍的模式 - 這將非常快。 http://blog.neo4j.org/2013/12/neo4j-20-ga-graphs-for-everyone.html

請在設備節點的屬性上為名稱創建索引。

CREATE INDEX ON :Equipment(name)

然后請嘗試以下優化查詢。

MATCH (n:Equipment { name: "name" }),
      (n)<-[IS_INSIDE*]-(x),
      (x)<-[CONNECTED_TO*]-(m:Cable)
RETURN m

請注意,這與您指定的等效匹配,但它會將其組合成三元組,這會導致Neo4j上的查詢執行計划首先匹配屬性名稱上的n:Equipment節點,而不是執行圖形全局匹配操作。 從減少的n:Equipment節點集中,以下匹配語句將更加IS_INSIDE掃描IS_INSIDECONNECTED_TO的可變長度模式。

首先要意識到在GraphDB中,性能主要取決於您構建的模型類型和各種節點的基數(在您的情況下為設備和電纜)。 通常使用PROFILE和EXPLAIN查詢將獲得有關查詢性能的信息性見解,包括數據庫命中數和所需的時間。 基於較低數量的DB命中選擇查詢是有利的。

有了它,讓我們先看看你正在使用的查詢:

MATCH (n:Equipment)<-[IS_INSIDE*]-()<-[CONNECTED_TO*]-(m:Cable) 
where n.name = "name" 
RETURN m

關於這一點的幾點指示是:

1)當您嘗試查找特定設備節點內的設備節點時,您不提及節點標簽。 嘗試使用:

MATCH (n:Equipment)<-[IS_INSIDE*]-(:Equipment)

代替

MATCH (n:Equipment)<-[IS_INSIDE*]-()

因為在您的情況下,您在設備和電纜節點中搜索名稱為“名稱”的設備。 使用我提到的替代方案,它將僅限於Cable節點。 假設設備不能在電纜內部。

2)與其他人一樣,在設備和電纜節點之上提到建築物指數將會有所幫助。 在Equipment.name屬性上構建索引。 您可以在所有Cable屬性上構建索引,這可以進一步提高性能。

您還可以分享有多少個設備節點以及有多少個有線節點。 此外,我假設您已經確保設備節點和電纜節點是不同的。 擁有更多關系是可以的,但我們的模型通常可以從更少的節點中獲益。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM