一、CQL高级

1、CQL函数

  1. 字符串函数
MATCH (p:Person)
RETURN ID(p),LOWER(p.character)
match(p:Person)
return p.character,lower(p.character),p.name,substring(p.name,2),replace(p.name,"子","zi")
  1. 聚合函数
MATCH (p:Person)
RETURN MAX(p.money),SUM(p.money)
  1. 关系函数
match p = (:Person {name:"林婉儿"})-[r:Couple]-(:Person)
RETURN STARTNODE(r)
  1. shortestPath 函数返回最短的path
MATCH p=shortestPath( (node1)-[*]-(node2) )
RETURN length(p), nodes(p)
MATCH p=shortestPath((person:Person {name:"王启年"})-[*]-(person2:Person{name:"九品射手燕小乙"}) ) RETURN length(p), nodes(p)

2、CQL多深度关系节点

  1. CQL多深度关系节点
    查询三层级关系节点如下:with可以将前面查询结果作为后面查询条件
match (na:Person)-[re]->(nb:Person) where na.name="范闲" WITH na,re,nb match (nb:Person)-
[re2]->(nc:Person) return na,re,nb,re2,ncmatch (na:Person)-[re]->(nb:Person) where na.name="林婉儿" WITH na,re,nb match (nb:Person)-
[re2]->(nc:Person) return na,re,nb,re2,ncmatch (na:Person)-[re]-(nb:Person) where na.name="林婉儿" WITH na,re,nb match (nb:Person)-
[re2]->(nc:Person) return na,re,nb,re2,ncmatch (na:Person)-[re]-(nb:Person) where na.name="林婉儿" WITH na,re,nb match (nb:Person)-
[re2:Friends]->(nc:Person) return na,re,nb,re2,nc
  1. 直接拼接关系节点查询
match (na:Person{name:"范闲"})-[re]->(nb:Person)-[re2]->(nc:Person) return na,re,nb,re2,nc

为了方便,可以将查询结果赋给变量,然后返回

match data=(na:Person{name:"范闲"})-[re]->(nb:Person)-[re2]->(nc:Person) return data
  1. 使用深度运算符
    当实现多深度关系节点查询时,显然使用以上方式比较繁琐。
    可变数量的关系->节点可以使用-[:TYPE*minHops…maxHops]-。
    查询:
match data=(na:Person{name:"范闲"})-[*1..2]-(nb:Person) return data

3、事务

为了保持数据的完整性和保证良好的事务行为,Neo4j也支持ACID特性。
注意:

(1)所有对Neo4j数据库的数据修改操作都必须封装在事务里。
(2)默认的isolation level是READ_COMMITTED。
(3)死锁保护已经内置到核心事务管理 。 (Neo4j会在死锁发生之前检测死锁并抛出异常。在异常抛出之前,事务会被标志为回滚。当事务结束时,事务会释放它所持有的锁,则该事务的锁所引起的死锁也就是解除,其他事务就可以继续执行。当用户需要时,抛出异常的事务可以尝试重新执行)
(4)除特别说明,Neo4j的API的操作都是线程安全的,Neo4j数据库的操作也就没有必要使用外部的同步方法。

4、索引

  1. 概念
    Neo4j CQL支持节点或关系属性上的索引,以提高应用程序的性能。
    可以为具有相同标签名称的属性上创建索引。
    可以在MATCH或WHERE等运算符上使用这些索引列来改进CQL 的执行。

  2. 创建单一索引

CREATE INDEX ON :Label(property)
例如:
CREATE INDEX ON :Person(name)
  1. 创建复合索引
CREATE INDEX ON :Person(age, gender)
  1. 全文模式索引

之前的常规模式索引只能对字符串进行精确匹配或者前后缀索引(startswith,endswith,contains),全文索引将标记化索引字符串值,因此它可以匹配字符串中任何位置的术语。索引字符串如何被标记化并分
解为术语,取决于配置全文模式索引的分析器。索引是通过属性来创建,便于快速查找节点或者关系。

创建和配置全文模式索引

使用db.index.fulltext.createNodeIndex和db.index.fulltext.createRelationshipIndex创建全文模式索
引。在创建索引时,每个索引必须为每个索引指定一个唯一的名称,用于在查询或删除索引时引用相关的特定索引。然后,全文模式索引分别应用于标签列表或关系类型列表,分别用于节点和关系索引,然后应用于属性名称列表

call db.index.fulltext.createNodeIndex("索引名",[Label,Label],[属性,属性])
call db.index.fulltext.createNodeIndex("nameAndDescription",["Person"],["name",
"description"])
call db.index.fulltext.queryNodes("nameAndDescription", "范闲") YIELD node, score
RETURN node.name, node.description, score
  1. 查看和删除索引
call db.indexes 或者 :schema
DROP INDEX ON :Person(name)
DROP INDEX ON :Person(age, gender)
call db.index.fulltext.drop("nameAndDescription")

5、约束

  1. 唯一性约束

作用

  • 避免重复记录。
  • 强制执行数据完整性规则
    创建唯一性约束
CREATE CONSTRAINT ON (变量:<label_name>) ASSERT 变量.<property_name> IS UNIQUE

具体实例:

CREATE CONSTRAINT ON (person:Person) ASSERT person.name IS UNIQUE

删除唯一性约束

DROP CONSTRAINT ON (cc:Person) ASSERT cc.name IS UNIQUE
  1. 属性存在约束 (企业版中可用)
CREATE CONSTRAINT ON (p:Person) ASSERT exists(p.name)
  1. 查看约束
call db.constraints
:schema

二、Neo4j之Admin管理员操作

1、Neo4j - 数据库备份和恢复

在对Neo4j数据进行备份、还原、迁移的操作时,首先要关闭neo4j

./bin/neo4j stop

数据备份到文件

./bin/neo4j-admin dump --database=graph.db --to=/root/qyn.dump

还原、迁移之前 ,关闭neo4j服务。操作同上

./bin/neo4j-admin load --from=/root/qyn.dump --database=graph.db --force

重启服务

./bin/neo4j start

注意,运行数据备份可能会警告
WARNING: Max 1024 open files allowed, minimum of 40000 recommended. See the Neo4j manua

  • 编辑这个文件
    vi /etc/security/limits.conf
    在文件最后加入下面这段 修改最大打开文件限制
* soft nofile 65535
* hard nofile 65535
  • 重启服务器
    再次执行上面的步骤 警告就没有了

2、调优

  1. 增加服务器内存 和 调整neo4j配置文件
# java heap 初始值
dbms.memory.heap.initial_size=1g
# java heap 最大值,一般不要超过可用物理内存的80%
dbms.memory.heap.max_size=16g
# pagecache大小,官方建议设为:(总内存-dbms.memory.heap.max_size)/2,
dbms.memory.pagecache.size=2g
  1. neo4j刚启动数据是冷的需要预热
MATCH (n)
OPTIONAL MATCH (n)-[r]->()
RETURN count(n.name) + count(r);
  1. 查看执行计划进行索引优化

Cypher查询计划程序将每个查询转换为执行计划。 执行计划告诉Neo4j在执行查询时要执行哪些操作。

对执行计划的生成,Neo4j使用的都是基于成本的优化器(Cost Based Optimizer,CBO),用于制订精确的执行过程。可以采用如下两种不同的方式了解其内部的工作机制:
EXPLAIN:是解释机制,加入该关键字的Cypher语句可以预览执行的过程但并不实际执行,所以也不会产生任何结果。
PROFILE:则是画像机制,查询中使用该关键字,不仅能够看到执行计划的详细内容,也可以看到查询的执行结果。

关注指标:
estimated rows: 需要被扫描行数的预估值
dbhits: 实际运行结果的命中绩效
两个值都是越小越好

使用索引和不使用索引对比
MATCH (p { name : ‘范闲’ }) RETURN p
在之前加上profile来进行查询,可以查看查询计划

Neo4j CQL(函数、索引、约束)、备份恢复、优化相关推荐

  1. mongo备份索引_MongoDB——备份 恢复 索引 hashed片键

    备份库 mongodump -h 127.0.0.1 -d loginserver -o /root/data/soft/mongodb/backup/ 恢复库 mongorestore -h 127 ...

  2. Neo4j CQL(附springboot集成neo4j)

    CQL代表Cypher查询语言. 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言. 常用的Neo4j CQL命令/条款如下: S.No. CQL命令/条 用法 1. CREA ...

  3. Neo4j CQL简介

    CQL CQL 代表 Cypher 查询语言.像 Orcale 数据库具有查询语言 SQL,Neo4j 具有 CQL 作为查询语言. Neo4j CQL Neo4j 图形数据库的查询语言: 一种声明性 ...

  4. Neo4j - CQL简介

    CQL代表Cypher查询语言. 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言. Neo4j CQL - 它是Neo4j图形数据库的查询语言. 它是一种声明性模式匹配语言 ...

  5. Oracle函数索引与普通索引

    创建一张表,只有很少量的记录状态为'N',而我们只需要查询状态为'N'的记录 SQL> create table test as select 'Y' flag,o.* from dba_obj ...

  6. Oracle→序列、视图、索引、存储过程、存储函数、包、触发器、表分区、锁表解锁表、事务、PLSQL、备份恢复、游标

    序列SEQUENCE 视图VIEW 索引 同义词 存储过程 存储函数 包 JAVA调用包 触发器 表分区 锁表解锁表 事务 PLSQL 备份恢复

  7. MySQL 06 事务、视图、索引、备份和恢复

    MySQL 06 事务.视图.索引.备份和恢复 文章目录 MySQL 06 事务.视图.索引.备份和恢复 一.学习目标 二.事务 2.1什么是事务 2.2事务的特性 2.3为什么需要事务 三.使用事务 ...

  8. 40+倍提升,详解 JuiceFS 元数据备份恢复性能优化之路

    JuiceFS 支持多种元数据存储引擎,且各引擎内部的数据管理格式各有不同.为了便于管理,JuiceFS 自 0.15.2 版本提供了 dump 命令允许将所有元数据以统一格式写入到 JSON 文件进 ...

  9. RMAN备份恢复性能优化--MAXSETSIZE, MAXPIECESIZE, FILESPERSET, SECTION SIZE等

    RMAN备份恢复性能优化--MAXSETSIZE, MAXPIECESIZE, FILESPERSET, SECTION SIZE, MAXOPENFILES等 ㈠ 发现问题 RMAN在做备份.恢复时 ...

最新文章

  1. 揭秘特斯拉自动驾驶雄心:最大优势非算法或技术而是海量数据
  2. MaxCompute - ODPS重装上阵 第二弹 - 新的基本数据类型与内建函数
  3. DL之BP:利用乘法层/加法层(forward+backward)算法结合计算图(CG)求解反向求导应用题
  4. java中使用递归方法删除_删除和拷贝文件递归方法(Java实现)
  5. 实战解读ASP.NET Core身份认证
  6. mysql崩溃_mysql崩溃原因分析
  7. Linux(服务器编程):25---epoll复用技术实现统一处理信号事件源
  8. js parseInt()和Number()区别
  9. python自动化测试-如何学习自动化测试?
  10. C语言基础教程之函数
  11. 对称与非对称加密算法总结
  12. 菠萝罐头的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. php设计超级玛丽人物,面向对象实现简单版的超级马里奥小游戏
  14. 经纬度 在线计算距离
  15. 数据结构与算法-表(单链表 循序表 )
  16. provide和inject的使用
  17. 互联网名称与数字地址分配机构ICANN简介
  18. 还在到处寻找画图软件?快来用Typora画饼图、时序图、流程图、UML图和状态图吧
  19. MFC(CFile)文件操作
  20. 虚拟机安装时黑屏的解决办法

热门文章

  1. ASPX+MSSQL注入
  2. android 不编译odex,android 编译源码不生成odex
  3. 字节跳动青训营--前端day3
  4. 【Flask】YOLO挖掘机目标检测模型Python flask部署(附项目链接)
  5. GDB再学习(6):断点调试之软件断点
  6. 订单号创建(php)
  7. python创建一个列表_Python创建一个元素都为0的列表实例
  8. IIS配置文件的XML格式不正确
  9. 绝对定位——absolution
  10. 物联网传感技术 第一章无线传感网概述