• Neo4j---性能优化


         不会项目管理的研发不是好司机(^_^ ^_^),开个玩笑,目的是想说项目管理很重要,研发同胞们需要重视、重视、重视(重要的事情说三遍)。随着项目业务扩展,不再是停留在基本某一业务范围,海量数据接踵而至,接口性能明显出现瓶颈,性能优化迫在眉睫。。。

    一、基础调优

     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

  • 相关阅读:
    我是如何学习写一个操作系统(七):进程的同步与信号量
    我是如何学习写一个操作系统(六):进程的调度
    我是如何学习写一个操作系统(五):故事的高潮之进程和线程1
    我是如何学习写一个操作系统(四):操作系统之系统调用
    我是如何学习写一个操作系统(三):操作系统的启动之保护模式
    我是如何学习写一个操作系统(二):操作系统的启动之Bootloader
    我是如何学习写一个操作系统(一):开篇
    Android计量单位px,in,mm,pt,dp,dip,sp和获取屏幕尺寸与密度
    Azure自定义角色实现RBAC
    Linux两块4TB的数据磁盘创建8TB的Raid0
  • 原文地址:https://www.cnblogs.com/huyangshu-fs/p/12651919.html
Copyright © 2020-2023  润新知