neo4j性能调优(转)
最近在公司实习做的就是优化neo4j图形数据库查询效率的事,公司提供的是一个在Linux上搭建且拥有几亿个节点的数据库。开始一段时间主要是熟悉该数据库的一些基本操作,直到上周才正式开始步入了优化数据库查询效率的阶段,然而庆幸的是在这周就已经把数据库的查询效率优化的可以商用了。
刚开始时,在公司的neo4j数据库中进行关联查询时,有些查询指令甚至长达两小时都未返回待查结果,以致无法满足一般的商业需求。后来经过查阅相关资料,获得了如下几种优化思路:
1:增加索引
2:优化neo4j配置文件
3:增加服务器内存
4:增加ssd固态硬盘
一、增加索引
经查阅相关资料可知,neo4j数据库的索引一般分为三类。
① 手动索引:Neo4j数据库若采用手动方式创建索引,则索引并不会随着数据的改变而自动更新。虽然该种方法可以手动创建和维护索引,但由于较为麻烦,所以一般不采用。
② 自动索引:自动索引是一种通过修改配置文件来创建索引的方法,但是在目前的neo4j 3.x版本中已经摒弃了用该方法来创建索引,并建议使用模式索引代替之。
③ 模式索引:模式索引和关系数据库中的索引很相似, 每一个索引会对应一个标签和一组属性,无论是更新还是删除节点,索引都会自动更新或者删除,因此该种创建索引的方式更适用。
很显然采用模式索引会更简单方便,而建立模式索引,需要使用Cypher语句:CREATE INDEX ON: 标签(待查字段)。一般在浏览器http://172.18.34.25:7474/browser/网页上,可分别为待查字段建立模式索引。然而实验结果表明,建立索引后的查询时间虽有减少但不足以满足实际需求。另外有一点非常重要,索引建立后只是Populating状态,一定要一定要一定要重启数据库并关闭http://172.18.34.25:7474/browser/网页让索引ONLINE生效,否则刚刚建的索引是无效的,望大家切记。若不知道待查字段是否已有索引,可用“:schema”指令查看当前数据库中已建好的所有索引和索引是否ONLINE。
二、优化neo4j配置文件
① 先明确neo4j的安装路径,然后执行“cd /home/public/Software/neo4j-community-3.3.7/conf/”指令进入指定目录下。由于要对neo4j配置文件进行修改,为了保险起见建议在对neo4j.conf文件进行修改之前,先备份一份neo4j.conf文件。
② 用“vim neo4j.conf”指令打开neo4j.conf文件并进行相应修改。经过查阅一些资料得知,通过添加jvm虚拟环境可以提高数据库的查询速度,即取消neo4j配置文件中关于dbms.memory.heap.initial_size=512m;dbms.memory.heap.max_size=512m两行的注释,并做合适的修改(最大堆内存越大越好,但是要小于机器的物理内存)。
三、增加服务器内存(未实施)
四、增加ssd固态硬盘(未实施)
由于“增加索引”和“优化neo4j配置文件”已经可以让neo4j数据库的查询时间得到了较大的缩减,并能满足一般的商业需求,所以暂时还未进行“增加服务器内存”和“增加ssd固态硬盘”的优化操作。
心得体会:
①:在测试前一定要为待查字段分别建立模式索引,建与不建的查询速度是非常显著的哈;
②:索引创建后一定要ONLINE才会生效,这点把我坑的好惨啊!
③:测试查询语句时,一定要尽可能将在一类标签中(其实相当于一张表)靠后或靠中间的节点属性作为查询条件,这样才能遍历更多的节点,故所得的测试结果才会真实可信;
④:增加WHERE语句、配合使用AND、OR等加大查询复杂度,另外还可以通过使用错误的范围语句来进行测试,如 "2020-10"<= P1.paper_publish_date <= "2017-10";
⑤:测试语句也要将不存在的节点的属性作为查询条件,看返回空的时间如何;
⑥:学会优化Cypher查询语句,如
MATCH (a:Author)-[:author_is_in_field]->(f:Field)
WHERE f.field_level = "L3"
RETURN a.auhtor_name,f.field_name,f.field_reference_count
LIMIT 10
可以优化成
MATCH (a:Author)-[:author_is_in_field]->(f:Field{field_level:"L3"})
RETURN a.auhtor_name,f.field_name,f.field_reference_count
LIMIT 10
⑦:测试过程中,要想尽一切用户可能使用的场景来进行测试,切不可有意回避某些使用场景,否则不过是自欺欺人而已。
给大家推荐几个neo4j数据库学习网站:
【1】https://www.zhihu.com/question/45401120
【2】https://www.cnblogs.com/justcooooode/p/8182376.html
【3】https://blog.csdn.net/qq_37242224/article/details/81325625
【4】https://www.cnblogs.com/qianguyihao/category/587723.html
【5】https://www.cnblogs.com/loveis715/p/5277051.html
【6】https://blog.csdn.net/u011697278/article/details/52462420
【7】https://www.w3cschool.cn/neo4j/neo4j_need_for_graph_databses.html
【8】https://blog.csdn.net/u013946356/article/details/81739079
---------------------
作者:Vensmallzeng
来源:CSDN
原文:https://blog.csdn.net/Vensmallzeng/article/details/89299687
版权声明:本文为博主原创文章,转载请附上博文链接!
neo4j性能调优(转)的更多相关文章
- web前端性能调优
最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心 ...
- [网站性能2]Asp.net平台下网站性能调优的实战方案
文章来源:http://www.cnblogs.com/dingjie08/archive/2009/11/10/1599929.html 前言 最近帮朋友运营的平台进行了性能调优,效果还不错, ...
- Asp.net平台下网站性能调优的实战方案(转)
转载地址:http://www.cnblogs.com/chenkai/archive/2009/11/07/1597795.html 前言 最近帮朋友运营的平台进行了性能调优,效果还不错,所以写出来 ...
- 第0/24周 SQL Server 性能调优培训引言
大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤浅,博而不专,到现在我才发现自己的兴趣所在,于 ...
- sqlserver性能调优第一步
相信不少的朋友,无论是做开发.架构的,还是DBA等,都经常听说“调优”这个词.说起“调优”,可能会让很多技术人员心头激情澎湃,也可能会让很多人感觉苦恼,不知道如何入手.当然,也有很多人对此不屑一顾,因 ...
- JavaScript:内存泄露、性能调优
1.在进行JS内存泄露检查之前,先要了解JS的内存管理: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Manageme ...
- hadoop 性能调优与运维
hadoop 性能调优与运维 . 硬件选择 . 操作系统调优与jvm调优 . hadoop运维 硬件选择 1) hadoop运行环境 2) 原则一: 主节点可靠性要好于从节点 原则二:多路多核,高频 ...
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat.hprof等小巧的工具,本博客希望 ...
- websphere性能调优之dump命令
websphere性能调优之dump命令 基于WebSphere 构建的企业应用,时常会出现性能问题,在严重的情况下还会提示出内存溢出,这是一件很让人恼怒的事情.在WebSphere Applicat ...
随机推荐
- mq的基本介绍和基本用法
1.什么是MQ,有什么用? MQ 是message queue ,消息队列,也叫消息中间件,遵守JMS(java message service)规范的一种软件.(同时还有另一个叫AMQP的应用层协议 ...
- Python之print()函数
1. 输出字符串 >>> str = 'Hello World' >>> print (str) Hello World 2. 格式化输出整数 支持参数格式化 &g ...
- Java8-Optional与null
对null进行处理 程序中经常需要对null情况进行处理,比如Course类中有一个List stuList属性,Student有一个name属性. 现在想要查看某个student的name属性的长度 ...
- [android]adb 模拟双击 快速点击屏幕
1,记录数据文件到recordtap dd if=/dev/input/event1 of=/sdcard/recordtap 2,点击需要点击的位置,产生点击数据,然后按 ctrl+c 结束 3,写 ...
- SSM框架-MyBatis框架数据库的增删查改操作
话不多说,在User.xml文件中主要写一下操作数据库的sql语句,增,删,查,改是最常见的数据库操作 User.xml文件下:
- 在写WebApi判断用户权限时返回数据和接受支付结果 定义返回数据类型
using ADT.Core.Encrypt; using System; using System.Collections.Generic; using System.Linq; using Sys ...
- Ubuntu 16.04.3 LTS 安装 MongoDB
1.安装Ubuntu16.04 运行sudo apt-get install mongodb安装Mongodb 如果没有MongoDB库,则运行sudo apt-get update更新库. 2.运行 ...
- 思维导图工具XMind下载
XMind 是一款非常实用的商业思维导图软件,全力打造易用.高效的可视化思维软件,强调软件的可扩展.跨平台.稳定性和性能,致力于使用先进的软件技术帮助用户真正意义上提高生产率.XMind 支持 在Wi ...
- JS 实现右下角弹窗
<!DOCTYPE HTML> <head> <title>JS实现右下角弹窗</title> <meta http-equiv="co ...
- Flask即插视图与tornado比较
由于公司使用了Tornado框架和Flask框架,之前一直使用的都是Flask框架,已经对url下面紧跟着视图的写法很固执.刚开始接触Tornado框架,对于其url和视图分开的写法思想上无法转变.今 ...