Neo4j---性能優化

     不會項目管理的研發不是好loder(^_^ ^_^),開個玩笑,目的是想說項目管理很重要,研發同胞們需要重視、重視、重視(重要的事情說三遍)。隨着項目業務擴展,不再是停留在基本某一業務範圍,海量數據接踵而至,接口性能明顯出現瓶頸,性能優化迫在眉睫。。。

一、基礎調優

 1、cql語句性能排查

 (1)EXPLAIN + 執行的cql語句

    僅僅查看執行計劃,不執行語句

 (2)PROFILE + 執行的cql語句

    運行語句,並全程監督資源使用情況

 (3)查看索引創建情況

    :schema

   2、 使用建議

  1)相關主鍵創建索引  語法格式CREATE INDEX ON: 標籤(待查字段);

    ①模式索引:模式索引和關係數據庫中的索引很相似, 每一個索引會對應一個標籤和一組屬性,無論是更新還是刪除節點,索引都會自動更新或者刪除,因此該種創建索引的方式更適用。

    注意:索引狀態是ONLINE才能生效,否則剛剛建的索引是無效的。

  2)創建唯一索引,避免數據入庫檢查,造成性能浪費(可以在入庫之前校驗好數據的完整性和唯一性)CREATE CONSTRAINT ON (n:ResNode) ASSERT n.id IS UNIQUE;

  3)create 和 merge的區別 MERGE命令是CREATE命令和MATCH命令的組合。 MERGE = CREATE + MATCH 故新增節點儘量避免merge;

     4)不必要的數據,儘可能早的過濾掉,減少後期處理的數據量;

       5)避免返回整個節點,返回其中需要的數據。

 

二、優化neo4j配置文件

  對neo4j.conf文件並進行相應修改。通過添加jvm虛擬環境可以提高數據庫的查詢速度,即取消neo4j配置文件中關於dbms.memory.heap.initial_size=512m;dbms.memory.heap.max_size=512m兩行的註釋,並做合適的修改(最大堆內存越大越好,但是要小於機器的物理內存)。

 

三、進階方案解決性能問題

  1、合理引入中間件

  eg:涉及內容關鍵字檢索,可以使用elasticSearch,避免直接從neo4j搜索查詢,若能結合redis及內存緩存獲取詳細資源信息,搜索只返回主鍵,還能進一步提交查詢效率,用戶體驗大幅提升;

    涉及大量查詢可以使用redis作爲neo4j的一個緩存庫,既能提高性能,也能避免neo4j的資源消耗;

  2、分庫存儲,充分利用neo4j的圖存儲和查詢特點,neo4j中只提供圖的存儲和查詢功能,節點的屬性信息保存在mongodb(或其他NoSql 數據庫中---字段可以直接存儲)進行關聯查詢,各取所長,充分利優勢,優化性能;

  3、使用neo4j企業版高可用、集羣方案,適用於不差錢的企業組織哈。  

 

  感謝閱讀,如需轉載,請註明出處https://www.cnblogs.com/huyangshu-fs/p/12651919.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章