【neo4j图数据库】入门实践篇

news2024/10/6 23:17:57

探索数据之间的奥秘:Neo4j图数据库引领新纪元

在数字化浪潮汹涌的今天,数据已成为企业最宝贵的资产之一。然而,随着数据量的爆炸性增长和数据关系的日益复杂,传统的关系型数据库在处理诸如社交网络、推荐系统、生物信息学等高度互联的数据时显得力不从心。Neo4j,作为图数据库领域的佼佼者,遥遥领先!

neo4j简介

  • neo4j是由Java实现的开源NoSQL图数据库。自从2003年开始研发,到2007年发布第一版。neo4j现如今已经被各行各业的数十万家公司和组织采用。
  • neo4j实现了专业数据库级别的图数据模型的存储。与普通的图处理或内存级数据库不同,neo4j提供了完整的数据库特性,包括ACID事物的支持,集群支持,备份与故障转移等。这使其适合于企业级生产环境下的各种应用。

  • neo4j的版本说明:
  • 企业版:需要高额的付费获得授权,提供高可用,热备份等性能。
  • 社区开源版:免费使用,但只能单点运行。

neo4j图数据库概念 

✨️节点:节点是Neo4j图数据库中的基本元素,用于表示实体或对象。每个节点都可以看作是一个独立的实体,如一个人、一部电影或一个城市。

  • 可以将节点类比为关系型数据库中的表,对应的标签可以类比为不同的表名,属性就是表中的列。

✨️属性:属性是附加在节点或关系上的键值对,用于描述节点或关系的详细特征。

✨️关系:关系连接两个节点,关系是方向性的,关系可以有一个或多个属性

✨️标签:标签是Neo4j中对节点进行分类和组织的一种方式,类似于关系型数据库中的表名。


neo4j图数据库的安装 

neo4j图数据库的安装流程:

  • 第一步:将neo4j安装信息载入到yum检索列表。

  • 第二步:使用yum install命令安装。

  • 第三步:修改配置文件内容 /etc/neo4j/neo4j.conf.

  • 第四步:启动neo4j数据库。

💦第一步:将neo4j安装信息载入到yum检索列表

sudo rpm --import https://debian.neo4j.com/neotechnology.gpg.key
sudo yum-config-manager --add-repo https://yum.neo4j.com/stable

💦第二步:使用yum install命令安装

yum install neo4j

💦第三步:修改配置文件默认在/etc/neo4j/neo4j.conf

dbms.directories.data=/var/lib/neo4j/data
dbms.directories.plugins=/var/lib/neo4j/plugins
dbms.directories.certificates=/var/lib/neo4j/certificates
dbms.directories.logs=/var/log/neo4j
dbms.directories.lib=/usr/share/neo4j/lib
dbms.directories.run=/var/run/neo4j

# 导入的位置
dbms.directories.import=/var/lib/neo4j/import

# 初始化内存大小
dbms.memory.heap.initial_size=512m 

# web页面地址
dbms.connectors.default_listen_address=0.0.0.0

# HTTP Connector. There can be zero or one HTTP connectors.
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=:7474 

# HTTPS Connector. There can be zero or one HTTPS connectors.
dbms.connector.https.enabled=true
dbms.connector.https.listen_address=:7473 

dbms.connector.bolt.enabled=true
dbms.connector.bolt.listen_address=:7687

💦第四步:启动neo4j数据库

# 启动命令
neo4j start
  • 注意:如果使用的是云服务器,那么上述用到了7473端口、7687端口、就需要单独去开端口。

neo4j的可视化管理后台登陆 

(云服务器公网IP):7474    --> 进入浏览器界面

🧨Cypher介绍与使用

Cypher是一种描述性的图形查询语言,相当于MySQL中的SQL语句。

create命令

💯创建图数据中的节点

# 创建命令格式:
# create是关键字,创建节点名称node_name, 节点标签Node_Label, 放在小括号里面()
# 后面把所有属于节点标签的属性放在大括号'{}'里面,依次写出属性名称:属性值,不同属性用逗号','分隔
# 例如下面命令创建一个节点e, 节点标签是Employee, 拥有id, name, salary, deptnp四个属性:
CREATE (e:Employee{id:222, name:'Bob', salary:6000, deptnp:12})

match命令

💯匹配(查询)已有数据

MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno

MATCH (n) return n # 查询所有结点

merge命令

💯若节点存在,则等效与match命令; 节点不存在,则等效于create命令。

MERGE (e:Employee {id:146, name:'Lucer', salary:3500, deptno:16})

成功创建!

  • 然后再次用merge查询,发现数据库中的数据并没有增加,因为已经存在相同的数据了,merge匹配成功。

 

使用create创建关系

💯必须创建有方向性的关系,否则报错。

# 创建一个节点p1到p2的有方向关系,这个关系r的标签为Buy, 代表p1购买了p2, 方向为p1指向p2
CREATE (p1:Profile1)-[r:Buy]->(p2:Profile2)

创建完成关系后,再次查看全部:

使用merge创建关系

💯可以创建有/无方向性的关系。

# 创建一个节点p1到p2的无方向关系,这个关系r的标签为miss, 代表p1-miss-p2, 方向为相互的
MERGE (p1:Profile1)-[r:miss]-(p2:Profile2)

where命令

💯类似于SQL中的添加查询条件。

# 查询节点Employee中,id值等于123的那个节点
MATCH (e:Employee) WHERE e.id=123 RETURN e

delete命令

💯删除节点/关系及其关联的属性。

# 注意:删除节点的同时,也要删除关联的关系边
MATCH (p1:Profile1)-[r]-(p2:Profile2) DELETE p1, r, p2

sort命令

Cypher命令中的排序使用的是order by

# 匹配查询标签Employee, 将所有匹配结果按照id值升序排列后返回结果
MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno ORDER BY e.id

# 如果要按照降序排序,只需要将ORDER BY e.salary改写为ORDER BY e.salary DESC
MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno ORDER BY e.salary DESC

字符串函数:

  • toUpper()函数
  • toLower()函数
  • substring()函数
  • replace()函数

toUpper()函数

将一个输入字符串转换为大写字母。

  • 演示:
MATCH (e:Employee) RETURN e.id, toUpper(e.name), e.salary, e.deptno

 

💩toLower()函数 :将一个输入字符串转换为小写字母。

💩substring()函数:返回一个子字符串。

💩replace()函数 :替换掉子字符串。


聚合函数

  • count()函数
  • max()函数
  • min()函数
  • sum()函数
  • avg()函数

count()函数 :返回由match命令匹配成功的条数。

MATCH (e:Employee) RETURN count( * )

max()函数 :返回由match命令匹配成功的记录中的最大值。

# 返回匹配标签Employee成功的记录中,最高的工资数字
MATCH (e:Employee) RETURN max(e.salary)

 其余的就不过多赘述,相信大家也明白了~


索引index 

  • Neo4j支持在节点或关系属性上的索引,以提高查询的性能。
  • 可以为具有相同标签名称的所有节点的属性创建索引。

创建索引:使用create index on来创建索引。

# 创建节点Employee上面属性id的索引
CREATE INDEX ON:Employee(id)

 

在Python中使用neo4j 

  • neo4j-driver是一个python中的package, 作为python中neo4j的驱动,帮助我们在python程序中更好的使用图数据库。

pip install neo4j-driver
from neo4j import GraphDatabase  
  
uri = "bolt://localhost:7687"  # Neo4j 数据库的 Bolt URI  
user = "neo4j"  # 用户名  
password = "你的密码"  # 密码  
  
driver = GraphDatabase.driver(uri, auth=(user, password))

def create_person(tx, name):  
    """在 Neo4j 数据库中创建一个 Person 节点"""  
    tx.run("CREATE (a:Person {name: $name})", name=name)  
  
with driver.session() as session:  
    session.write_transaction(create_person, "Alice")  
    session.write_transaction(create_person, "Bob")

def get_person(tx, name):  
    """查询并返回指定名称的 Person 节点"""  
    result = tx.run("MATCH (a:Person {name: $name}) RETURN a.name AS name", name=name)  
    return [record["name"] for record in result]  
  
with driver.session() as session:  
    alice_name = session.read_transaction(get_person, "Alice")  
    print(alice_name)  # 输出: ['Alice']

driver.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1885934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TypeScript 中 const enum 和 enum 的核心区别在哪?日常开发应该使用哪个?

编译结果 enum 会生成一个对象,引用的地方保持对其引用 const enum 会擦除 enum 定义的代码,引用的地方会生成 inline code 使用enum: 使用const enum: PS:编译选项 preserveConstEnums 可以使 const enum 不去擦除 …

自动扫描范围在减少剂量多相CT肝脏成像中的应用:基于CNN和高斯模型| 文献速递-深度学习自动化疾病检查

Title 题目 Automatic scan range for dose-reduced multiphase CT imaging of theliver utilizing CNNs and Gaussian models 自动扫描范围在减少剂量多相CT肝脏成像中的应用:基于CNN和高斯模型 01 文献速递介绍 肝癌是全球癌症死亡的第四大原因,每…

工作效率倍增:最常用的电脑快捷键大全

文章目录 1. CtrlA(全选)2. CtrlC(复制)3. CtrlX(剪切)4. CtrlV(粘贴)5. CtrlZ(撤销)6. CtrlY(恢复)7. Ctrl1,2,3...(切换…

武汉星起航:成功挂牌上股交,引领跨境电商行业进入全新发展阶段

2023年10月30日,武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示,这一里程碑式的事件标志着武汉星起航正式登陆资本市场,开启了公司发展的新篇章。作为亚马逊跨境电商领域的领军企业之一,武汉星起航此次挂牌不仅是…

SET加密:电子商务安全的基石

随着电子商务的飞速发展,如何确保在线交易的安全性和可信度已成为消费者、商家和金融机构共同关注的焦点。SET协议(Secure Electronic Transaction)作为一种安全电子交易的国际标准,凭借其卓越的安全性能和广泛的行业认可&#xf…

Linux——查找文件-find(详细)

查找文件-find 作用 - 按照文件名、大小、时间、权限、类型、所属者、所属组来搜索文件 格式 find 查找路径 查找条件 具体条件 操作 注意 - find命令默认的操作是print输出 - find是检索文件的,grep是过滤文件中字符串 参数 参数 …

四川赤橙宏海商务信息咨询有限公司是真的吗?

在数字经济的浪潮下,电商行业日新月异,各种创新模式层出不穷。其中,抖音电商以其独特的社交属性和短视频传播优势,迅速崛起成为电商领域的一匹黑马。在这个风起云涌的市场中,四川赤橙宏海商务信息咨询有限公司凭借其专…

VUE3+ AntV Select 选择器:mode=“multiple“和mode=“tags“的区别是什么

文章目录 VUE3 AntV Select 选择器:mode"multiple"和mode"tags"的区别是什么一、解释二、对比演示 VUE3 AntV Select 选择器:mode"multiple"和mode"tags"的区别是什么 一、解释 “mode” 是一个参数&#xff…

TF-IDF和BM25原理和区别

TF-IDF TF-IDF是TF(词频,Term Frequency)和IDF(逆文档频率,Inverse Document Frequency)的乘积。我们先来看他们分别是怎么计算的: TF的计算有多种方式,常见的是 除以文章总词数是…

【浦语大模型开源探索】InternLM实战营第二期:技术笔记与全链路解析

本次课程链接在GitHub上: InternLM/Tutorial at camp2 (github.com) 第一次课程录播链接: 书生浦语大模型全链路开源体系_哔哩哔哩_bilibili InternLM2技术报告: arxiv.org/pdf/2403.17297.pdf 一、书生浦语大模型全链路开源体系笔记 Int…

页面速度是如何影响SEO的?

搜索引擎使用复杂的算法来衡量您网站的重要方面,以决定是否向您发送流量。 搜索引擎使用您网站的小元素来确定您网站的质量和真实性,然后此操作将转化为您的网页在搜索引擎结果页面 中出现的位置。提高您在 SERP 中的排名的过程称为搜索引擎优化 (SEO)。…

.net 项目中配置 Swagger

一、前言 二、Swagger 三、.net 项目中添加Swagger 1、准备工作 (1).net项目 (2)SwaggerController (3)XML文档注释 2、安装Swagger包 3、 添加配置swagger中间件 (1)添加S…

提升效率就靠它们啦

Hey小伙伴们~👋 知道你们都在忙碌的工作中寻求高效的秘诀,今天就给大家安利五款超实用的国产工作App,让你的工作生活更加得心应手哦!💼✨ 1️⃣【亿可达】 作为一款自动化工具,亿可达被誉为国内…

数据结构-----【链表:基础】

链表基础 1、链表的理论基础 1)基础: 链表:通过指针串联在一起的线性结构,每个节点由两部分组成,一个是数据域,一个是指针域(存放指向下一个节点的指针),最后一个指针…

重塑电商版图:全民拼购的崛起与魅力

在数字化浪潮的推动下,电子商务领域正经历着前所未有的变革,其中,全民拼购作为一种创新的电商玩法,正逐步成为市场的新宠。本文旨在深入探讨全民拼购的核心理念、运作机制、独特优势及其引人入胜的参与方式,为行业内外…

如何挑选适合的无线模块?哪些方面值得关注

市场上的无线模块种类繁多,如LoRa模块,WiFi模块,蓝牙模块,UWB模块等涵盖了各种不同的通信标准和应用需求,为满足模块的特定需求并能实现模块最大的性能价值,那么在选择无线模块的时候可以考虑以下几个方面。…

跟我练习100道FPGA入门题目~(1/100)

难度指数:一颗星 关键词:组合逻辑、入门基础 题目介绍: 多路选择器又称为数据选择器,请参考真值表设计一个二选一多路选择器。 其中s为控制信号,d0,d1为两个输入信号,y为输出信号。当s为低电…

金蝶云星空字段之间连续触发值更新

文章目录 金蝶云星空字段之间连续触发值更新场景说明具体需求:解决方案 金蝶云星空字段之间连续触发值更新 场景说明 字段A配置了字段B的计算公式,字段B配置了自动C的计算公式,修改A的时候,触发了B的重算,但是C触发不…

如何利用GPT-4o生成有趣的梗图

文章目录 如何利用GPT-4o生成有趣的梗图一、引言二、使用GPT-4o生成梗图1. 提供主题2. 调用工具3. 获取图片实际案例输入输出 三、更多功能1. 创意和灵感2. 梗图知识 四、总结 如何利用GPT-4o生成有趣的梗图 梗图,作为互联网文化的一部分,已经成为了我们…