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

探索数据之间的奥秘: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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OPCUA相关概念和KepServer OPCUA连接PLC

文章背景 项目中需要使用OPC UA 来读取PLC的点位。本文简单介绍了OPC UA和使用KepServer软件连接PLC并读点。OPC相关概念 OPC之前,软件开发需要写大量驱动程序去连接设备,设备上的一个硬件改变,应用程序都有可能需要重写,不同设备…

水经微图Web版1.9.0发布

水经微图(简称“微图”)新版已上线,在该版本中主要新增了对WGS84图源加载、火星坐标图源加载和大字体图源加载功能,以及多面要素的加载功能。 现在,为你分享一下本轮迭代的主要新增功能,以及部分功能的效果…

STL空间配置器

空间配置器(allocator)(重点) 背景需求:在底层默默的实现空间的分配 问题:空间的申请与对象的创建两者分开,因为不断创建的时候可能会频繁的申请空间扩容。 类似操作:reserve函数…

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

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

告别推广迷茫,Xinstall渠道包助您精准统计应用商店数据!

在App推广的浩瀚征途中,每一位广告主和开发者都面临着同样的挑战:如何在众多应用商店中脱颖而出,实现高效推广与精准获客?今天,就让我们一同探索Xinstall应用商店渠道包的独特魅力,看看它是如何成为解决这一…

【产品经理】聊聊PLG策略

PLG 是一种以用户增长为导向的策略,如何理解这种策略?适合采用PLG模式的SaaS又有哪些? 一、企业软件采购方式的变迁 从用户的角度:企业软件采购从CIO主导,逐渐演化为经理或者员工可做出决策。 从供应商的角度&#x…

剪映 v5.5 Pro Vip解锁版:使用指南与注意事项

摘要:本文介绍了剪映Pro VIP解锁版的使用方法,包括安装、测试和使用VIP素材的步骤,以及如何避免误报和保持解锁状态的建议。 正文: 剪映Pro是一款广受欢迎的视频编辑软件,提供了丰富的视频编辑功能和大量高质量的素材…

自动化测试报告pytest-html样式美化

最近我将 pytest-html 样式优化了 一版 先看优化前: 优化后: 优化内容包括: 删除部分多余字段新增echart图表部分字体大小、行间距、颜色做了美化调整运行环境信息移至报告最后部分字段做了汉化处理(没全部翻译是因为&#xf…

python学习-函数

函数 函数:是组织好的,可重复使用的,用来实现特定功能的代码段。 内置函数可重复使用 为什么要学习、使用函数呢? 为了得到一个针对特定需求、可供重复利用的代码段 提高程序的复用性,减少重复性代码,…

记一次阿里云服务器java应用无法响应且无法远程连接的问题排查

问题表现 java服务无响应,无法远程链接到服务器。 今天中午12点多,应用直接崩溃。后续进入到服务器,发现java进程都不在了, 排查过程 先安装atop工具 安装、配置并使用atop监控工具 等下次再出现时看相关时间点日志&#xff…

Docker在windows上使用vscode远程连接容器

目录 一、提前准备: 二、vscode连接docker容器 三、构建好的docker容器直接连接vscode 四、Windows下的可视化出linux的ui界面 在日常的开发中,不想windows和linux两个系统之间来回切换,笔者最近打算所有的环境均在一个系统上完成。为了交…

26K Star!LLM多智能体AutoGen教程3:我的外包弟弟写代码

读到这里想必已经入门AutoGen了,但怎么让它自动写代码自动调试啊,我也想要一个外包弟弟给我干活,我就喝杯茶摸摸鱼审核一下代码就好了呀。这不巧了,最近PM要求我给他弄一份某SDK支持车厂的列表,这种简单的事情在以前我…

msvcp140_ATOMIC_WAIT.dll丢失的多种解决方法分享,实测有效

在日常使用电脑的过程中,我们可能会遇到一些错误提示,其中之一就是“msvcp140_ATOMIC_WAIT.dll丢失”。那么,msvcp140_ATOMIC_WAIT.dll丢失是怎么回事呢?本文将从msvcp140_ATOMIC_WAIT.dll丢失的原因分析、对电脑的影响以及解决方…

武汉星起航:自运营团队驾驭亚马逊市场,领航跨境新纪元,成绩斐然

在跨境电商的浪潮中,武汉星起航电子商务有限公司的自运营团队以其卓越的运营能力、深厚的市场洞察力和灵活的应变策略,在亚马逊这片广阔的电商海域中,书写了一段又一段辉煌的篇章。 武汉星起航的自运营团队,是一支由经验丰富、技…

PyTorch入门笔记

学习参考: PyTorch简单入门视频 深入浅出PyTorch 小土堆笔记 前置知识 AI vs ML vs DL AI(Artificial Intelligence):通过让机器模仿人类进而超越人类ML(Machine Learning):让机器模仿人类的一…

RabbitMQ 之 延迟队列

目录 ​编辑一、延迟队列概念 二、延迟队列使用场景 三、整合 SpringBoot 1、创建项目 2、添加依赖 3、修改配置文件 4、添加 Swagger 配置类 四、队列 TTL 1、代码架构图 2、配置文件代码类 3、生产者 4、消费者 5、结果展示 五、延时队列优化 1、代码架构图 …

Android 11.0 SettingsProvider 源码分析

文章目录 一、SettingsProvider 的概述二、SettingsProvider 的启动流程三、对 SettingsProvider 进行操作方法四、客制化示例 一、SettingsProvider 的概述 SettingsProvider 是一个为 Android 系统设置提供数据共享的 Provider,它包含全局、安全和系统级别的用户…

AI大模型对话(上下文)缓存能力

互联网应用中,为了提高数据获取的即时性,产生了各种分布式缓存组件,比如Redis、Memcached等等。 大模型时代,除非是免费模型,否则每次对话都会花费金钱来进行对话,对话是不是也可以参照缓存的做法来提高命…

207.贪心算法:最大子数组和(力扣)

代码展示 class Solution { public:int maxSubArray(vector<int>& nums) {int result INT_MIN; // 初始化结果为最小可能的整数int sum 0; // 初始化当前子数组和为0// 遍历数组中的每一个元素for (int i 0; i < nums.size(); i){sum nums[i]; //…

PHP电商系统开发指南最佳实践

电子商务系统开发的最佳实践包括&#xff1a;数据库设计&#xff1a;选择适合关系型数据库&#xff0c;优化数据结构&#xff0c;考虑表分区&#xff1b;安全&#xff1a;加密数据&#xff0c;防止 sql 注入&#xff0c;处理会话管理&#xff1b;用户界面&#xff1a;遵循 ux 原…