前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Neo4j 使用指南

Neo4j 使用指南

作者头像
星辉
发布2019-10-28 11:26:13
2.2K0
发布2019-10-28 11:26:13
举报

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/y_silence_/article/details/102758086

目录

  • Neo4j 调用
    • 添加约束
    • 调用前预热
    • 标签查询
    • 创建索引
    • 删除索引和约束
  • Neo4j 管理
    • Neo4j 性能优化
    • 性能结果反馈
  • python3 与 neo4j
  • Neo4j 指令
    • 创建
    • 删除
    • 更新
    • 查询
  • 资源

Neo4j 调用

添加约束

代码语言:javascript
复制
CREATE CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE;
CREATE CONSTRAINT ON (book:Book) ASSERT exists(book.isbn);
CREATE CONSTRAINT ON ()-[like:LIKED]-() ASSERT exists(like.day);
CREATE CONSTRAINT ON (n:Person) ASSERT (n.firstname, n.surname) IS NODE KEY;

节点属性值唯一约束(Unique node property):如果节点具有指定的标签和指定的属性,那么这些节点的属性值是唯一的 节点属性存在约束(Node property existence):创建的节点必须存在标签和指定的属性 关系属性存在约束(Relationship property existence):创建的关系存在类型和指定的属性 节点键约束(Node Key):在指定的标签中的节点中,指定的属性必须存在,并且属性值的组合是唯一的

请注意,属性存在约束只能在 Neo4j 企业版中使用。

调用前预热

代码语言:javascript
复制
graph.run('MATCH (n) OPTIONAL MATCH (n)-[r]->() RETURN count(n.query_address) + count(r.query_address)')

标签查询

在图形结构中,标签用于对节点进行分组,相当于节点的类型,拥有相同标签的节点属于同一个分组。一个节点可以拥有零个,一个或多个标签,因此,一个节点可以属于多个分组。对分组进行查询,能够缩小查询的节点范围,提高查询的性能。

一个关系仅有一个关系类型。

创建索引

在查询被索引的属性时,Neo4j自动应用索引,以获得查询性能的提升。

代码语言:javascript
复制
CREATE INDEX ON :Person(firstname)
CREATE INDEX ON :Person(firstname, surname)

索引建立后只是Populating状态,需要注意重启数据库,并关闭管理网页。

查询索引和约束

指令:schema

模式

Neo4j的模式(Schema)通常是指索引,约束和统计,通过创建模式,Neo4j能够获得查询性能的提升和建模的便利。

删除索引和约束

代码语言:javascript
复制
# 删除索引
DROP INDEX ON :Album(name);
# 删除约束
DROP CONSTRAINT ON (a:Artist) ASSERT a.name IS UNIQUE

Neo4j 管理

Neo4j 性能优化

优化Neo4j配置文件
  • 建议配置 用指令 bin/neo4j-admin memrec --memory=内存大小g 让其建议neo4j.conf的配置
  • 更改配置 Neo4j配置文件所在位置如下
1.png
1.png

将其中相应的配置参数改为建议值。

代码语言:javascript
复制
# 举例,给图数据库分配 16g 的内存
bin/neo4j-admin memrec --memory=16g
# 获得的建议结果如下
dbms.memory.heap.initial_size=5g
dbms.memory.heap.max_size=5g
dbms.memory.pagecache.size=7g

性能结果反馈

EXPLAIN:是解释机制,加入该关键字的Cypher语句可以预览执行的过程但并不实际执行,所以也不会产生任何结果 PROFILE:则是画像机制,查询中使用该关键字,不仅能够看到执行计划的详细内容,也可以看到查询的执行结果

代码语言:javascript
复制
# 用于测试查询语句的效率
profile match (n)
where n.name = 'Annie'
return n

python3 与 neo4j

代码语言:javascript
复制
from configs.conf import config as conf
from py2neo import Graph, Node, Relationship

class Neo4j_connection:

    """function: used to manage Neo4j db operations"""

    def __init__(self, host, user, password):
        self.conn = Graph(host=host, user=user, password=password)


    def create_relative(self):
        a = Node("Person", name="Alice", age=33)
        b = Node("Person", name="Bob", age=44)
        KNOWS = Relationship.type("KNOWS")
        self.conn.merge(KNOWS(a, b), "Person", "name")


if __name__ == '__main__':

    # connect neo4j
    g_graph = Neo4j_connection(host=conf.NEO4J_HOST, user=conf.NEO4J_USER, password=conf.NEO4J_PASSWD)
    g_graph.create_relative()

Neo4j 指令

创建

创建节点
代码语言:javascript
复制
CREATE (n:Person{Person:'kk'}) return n;
创建关系
代码语言:javascript
复制
# 未带值的关系
MATCH (n),(m) WHERE n.id ="a" AND m.id = "b" CREATE (n)-[:TO]->(m)
# 带值的关系
MATCH (n),(m) WHERE n.Person ="jj" AND m.Person = "kk" CREATE (n)-[:TO{value: "1"}]->(m)
创建完整的 Path

由于Path是由节点和关系构成的,当路径中的关系或节点不存在时,Neo4j会自动创建

代码语言:javascript
复制
CREATE p =(vic:Worker:Person{ name:'vic',title:"Developer" })-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael:Worker:Person { name: 'Michael',title:"Manager" })
RETURN p

删除

删除关系
代码语言:javascript
复制
MATCH (:Person {id: "a"})-[r:KNOWS]-(:Person {id: "b"})
DELETE r
清空数据库
代码语言:javascript
复制
match (n) detach delete n

更新

为节点增加属性
代码语言:javascript
复制
match (n)
where id(n)=7
set n.name = 'neo'
return n;
为节点增加标签
代码语言:javascript
复制
match (n)
where id(n)=7
set n:Company
return n;
为关系增加属性
代码语言:javascript
复制
match (n)<-[r]-(m)
where id(n)=7 and id(m)=8
set r.team='Azure'
return n;

查询

查询所有节点
代码语言:javascript
复制
MATCH (n) RETURN n
查询所有关系
代码语言:javascript
复制
MATCH ()-[r]->() RETURN r

资源

官方文档 中文社区

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • Neo4j 调用
    • 添加约束
      • 调用前预热
        • 标签查询
          • 创建索引
            • 查询索引和约束
          • 删除索引和约束
          • Neo4j 管理
            • Neo4j 性能优化
              • 优化Neo4j配置文件
            • 性能结果反馈
            • python3 与 neo4j
            • Neo4j 指令
              • 创建
                • 创建节点
                • 创建关系
                • 创建完整的 Path
              • 删除
                • 删除关系
                • 清空数据库
              • 更新
                • 为节点增加属性
                • 为节点增加标签
                • 为关系增加属性
              • 查询
                • 查询所有节点
                • 查询所有关系
            • 资源
            相关产品与服务
            图数据库 KonisGraph
            图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档