自主练习一下Neo4j数据库(服务器上的Movie数据库作参考)

本文介绍了如何将CSV格式的数据导入Neo4j图数据库。首先,讲述了因Java版本冲突导致的启动问题,强调环境变量配置的重要性。然后详细说明了如何调整CSV数据格式,导入Person、Movie和关系表数据。最后,展示了使用Cypher语句创建节点和关系的过程,以及遇到的节点颜色显示问题。

Neo4j图数据库

Neo4j是一个世界领先的开源图形数据库。 它是由Neo技术使用Java语言完全开发的。(emmm,就这样,想知道更多,大家去百度吧)

Neo4j数据库的安装

大家可以参看这个博主的哦,我就是看的他的:Neo4j安装及简单使用
但是吧,我自己也遇到了一些问题。
1、由于以前学习的时候,安装的java版本是8,但是现在我现在下载的是java14,所以就存在两个JDK。然后呢,就报错,说我的jdk版本太低(系统找到的是java8的jdk),但是用命令(java -version)查出来的是java14。经过各种百度,各种修改,发现问题就是出在了环境变量上,所以大家一定要好好的仔仔细细的配置环境变量
(PS:问题其实没有解决,发现是环境变量问题,但是不管怎么改,就是错误。然而命运弄人,我去吃个饭,再次尝试启动,neo4j就可以跑起来了,感谢师兄,感谢上天)

说了这么多,重点就是:neo4j跑不起来的问题大概率是环境变量出错

开始下载服务器上面的表格(csv格式)

1、先导Person,Movie,这些节点数据表(因为导出的数据是类似Json格式的,所以需要大家手动调整数据格式。可以百度搜索EXCEL的分列功能,是个辛苦活,好好干,导出的数据会有一些数据少点东西,记得先挑出来哦)
在这里插入图片描述
2、然后是Acted_in表这种关系表,参照上面的调整数据格式

csv格式的数据准备好了,接下来就是开始利用neo4j导入数据啦

重申:这只是我的一次尝试,不代表大家一定要这么做。(求生欲满满)
1、先用load语句导入关系表,举个栗子:

load csv from “file:///ACTOR_IN00.csv” as line
create (n:ACTOR {name:line[0],born:line[1],role:line[2],ACTOR_IN00:“ACTOR_IN00”,tagline:line[3],title:line[4] ,released:line[5]})

看清哦我是创建的实体节点,我把它视为一种演员,表述为某某演员在某某电影里面扮演了某某角色
导入之后,你会看到很多单独的节点
在这里插入图片描述
2、同样利用load导入Person,Movie数据

load csv from “file:///Persone00.csv” as line
create (:Person00 {name:line[0],born:line[1]})

实际效果
参考
Movie类似,自己动手吧,嘿嘿(我懒)

3、接下来就是利用Create创建练习,使得Person节点和Movie串联起来。是时候用到第一步创建的ACTOR节点了

match(n:Person00),(m:Movie00),(r:ACTOR)
where n.name = r.name AND n.born = r.born AND m.title = r.title
create (n)-[:ACEDR_IN00]->(m)

看效果(我也不知道为什么我的都是灰色的,先留着这个问题,待会儿去解决,先记录下)
请添加图片描述

请添加图片描述
还有其他的关系,一样的道理,快去尝试吧。

都是灰色:可以自己去设置一下啊
在这里插入图片描述

基于图数据库存储引擎的 CMDB 系统 传统数据中心的资源对象与关系类型较为单一,CMDB 系统可以通过关系 型数据库对资源对象和关系数据进行分析和处理。 随着云计算、大数据等技术的高速发展与应用,数据中心资源对象的数 据规模越来越大, 资源对象之间的关系也更加复杂。 传统数据中心的资源对 象与关系类型较为单一,CMDB(Configuration Management Data Base,配 置管理数据库) 系统可以通过关系型数据库对资源对象和关系数据进行分析和 处理。 在云计算环境应用带来大规模图类型数据的场景下, 关系型数据库的 处理能力逐渐不足。 本文主要研究通过图数据库存储引擎处理大规模资源对象与关系数据, 为 CMDB 系统提供高效可靠的数据存储应用方案。 同时结合实验对比分析图 数据库和传统关系型数据库在大规模资源对象与关系数据上的查询存储性能 及优势特点,借助图数据库存储引擎来提升数据中心 CMDB 系统在故障分析、 风险预测等运维功能上的数据应用处理能力。 云计算平台模型分析 云计算技术通过虚拟化为业务系统提供了虚拟机、云硬盘、虚拟网络、 负载均衡等虚拟化的基础设施资源, 同时, 这些虚拟化的基础设施资源依赖数 据中心最底层的物理基础设施。 在数据中心中, 从底层物理基础设施到业务 系统之间, 云计算环境的承接产生了多层且复杂的关系。 每一层的资源节点 对象都与上层的业务系统存在关系,关系类型包括依赖、影响、关联等。 如图 1 所示, 从底层基础设施到上层应用业务系统需要跨越虚拟资源层上的多 个资源节点和对象。 云计算环境中业务系统、虚拟资源、基础设施相互关联,当某个节点出 现问题时, 需要通过关联关系找到其他受影响节点以定位整个故障域的影响范 围,并及时采取对应的措施。 由于自身设计结构的问题,关系型数据库在处 理不同对象组成的多种类型关联关系的图数据时, 只能依靠多表连接操的方 式进行存储。 这种存储方式在处理关系运算上表现很差, 随着数据量和关系 深度的增加,无法在理想的时间内运算出结果。 随着图数据理论研究日趋完善,在开源社区里逐渐出现了很多优秀的开 源图数据库。 图数据库区别于传统关系型数据库, 专门针对图数据的关系进 行建模和存储, 同时还提供了一套全新针对图数据的查询语法—Cypher。 本 文将以其中比较具有代表性的 Neo4j 开源图数据库为工具, 对比传统关系型数 据库 PostgreSQL,并结合在数据中心中应用越来越广泛的 OpenStack 开源云 计算环境,进行研究分析,旨在梳理云计算环境中不同层面之间的对象关系, 结合图计算方法对其中的实际应用场景模型进行分析, 提出符合实际应用场景 的基于图数据库存储引擎的 CMDB 系统建设方案。 CMDB 系统应用分析 数据种类及规模分析 目前,在行业私有云建设中,为实现面向应用的智能运维,运维系统需 要实现从基础设施层到虚拟化层, 再到应用层的自动化、 可视化。 其中, CMDB 对各种资源的关系数据记录是系统的核心,资源之间的关系搜索是难点。 以中国铁路主数据中心铁路云的规模为例,计算节点的规模达上千个, 虚拟机的规模达上万个,虚拟机上承载的容器、服务进程、日志文件、配置文 件等规模达百万、千万个以上。 假 设 资 源 节 点 对 象 为 N , 关 系 对 象 为 R , 资 源 节 点 集 合 为 : (式 1) 排除资源节点自身与自身的关系, 资源节点间的单一类型关系全集合为: (式 2) 由式 1 和式 2 可以得到资源节点集合元素的个数与资源节点间的关系集 合元素的个数计算表达式为: (式 3) 由式 3 可知,理想状态下,当资源节点数量级为万级别时,资源节点间 单一关系类型的关系数量级为亿级。 目前,CMDB 处理如此巨大的关系数据是十分困难的。 在实际场景中, 资源节点对象 N 还包含一些其他业务信息的属性,如 IP 地址、位置编号以及 软硬件信息等。 关系对象 R 中一般包括关系类型、相关联两个节点信息等。 关系数据库与图数据库区别 关系数据库数据存储在具有固定结构 (架构) 的表中, 每列具有名称、 类型、长度、约束等。 表与表之间的引用通过将一个表的主键为另一个表 的重复外键来实现。 对于多对多的关系数据,需要 JOIN 表(或关系表) 为连接表之间的桥梁。 区别于关系型数据库主外键的数据结构表达方式,图数据库中仅使用节 点、 关系 (边) 来表示和存储数据。 节点和关系可以保存任意数量的属性 (key- value pairs) 。 上述资源节点对象 N 和关系对象 R 的其他相关业务属性可直 接存储到对应节点和关系对象本身。 除资源节点关系表外,所有的表在图数据库中都可以认为是具有某些特 定属性节点的集合
### 使用 Neo4j 创建向量数据库 Neo4j 是一种强大的图形数据库,支持多种高级功能,包括创建和管理向量数据。为了实现这一点,通常会利用 Neo4j 的图数据科学库 (Graph Data Science Library, GDS),该库提供了丰富的机器学习算法集。 #### 安装必要的组件 首先,在 CentOS 上安装 Neo4j 可以通过指定 URL 下载 tarball 文件并解压到目标位置完成[^3]: ```bash curl -O https://neo4j.com/artifact.php?name=neo4j-community-3.5.6-unix.tar.gz tar -xf neo4j-community-3.5.6-unix.tar.gz cd neo4j-community-3.5.6/ bin/neo4j console ``` 接着配置 `neo4j.conf` 文件中的参数设置,确保启用了 APOC 插件以及内存映射等功能以便更好地处理大型矩阵运算[^2]: 编辑 `/etc/neo4j/neo4j.conf` 添加如下行: ```properties dbms.security.procedures.unrestricted=apoc.* dbms.memory.pagecache.size=2g ``` 重启服务使更改生效。 #### 构建向量索引 对于构建向量数据库而言,重要的是定义好节点属性为特征向量,并建立相应的索引来加速查询效率。假设有一个电影推荐场景下的评分表单,其中每部影片由多个维度描述其特性,则可以在导入这些记录之前先设计好模式结构。 创建标签为 "Movie" 和具有浮点型数组字段 "features" 表示各维权重的节点类目: ```cypher CREATE CONSTRAINT ON (m:Movie) ASSERT m.id IS UNIQUE; CREATE INDEX FOR (m:Movie { features:[0.0] }) ON EACH m.features; ``` 这里需要注意两点:一是确保唯一键约束的存在;二是针对多维数值建立了专门的索引形式来优化后续操性能。 #### 数据加载与预处理 接下来就是实际的数据填充过程了。可以通过批量插入语句或者借助外部工具如 Python 脚本来读取 CSV 文件等形式将原始资料转化为 Cypher 查询命令执行入库动。考虑到可能存在的缺失值情况,建议预先做适当清洗工再上传至服务器端解析运行。 例如,如果有一份名为 movies.csv 的文件包含了 id、title 字段外加若干个代表不同特性的列名(比如 genre、year 等),那么可以编写一段简单的脚本将其转换成适合 Neo4j 接受的形式: ```python import csv with open('movies.csv', 'r') as f: reader = csv.DictReader(f) for row in reader: feature_vector = [ float(row['genre']), int(row['year']) ] query = """ MERGE (m:Movie{id:{id}}) SET m += { title: {title}, features: {features} } """.format( id=row["id"], title=row["title"], features=str(feature_vector).replace("'", "") ) # 执行Cypher查询... ``` 此部分具体取决于所使用的编程环境和个人偏好而定。 #### 应用案例分析 最后介绍一个简单应用实例——基于余弦相似度计算两部品间的关联程度。这有助于理解如何运用已有的向量化表示来进行更复杂的推理任务。给定任意两个 Movie 类型实体 u 和 v ,可通过下面这段代码片段求得二者间夹角余弦值从而反映彼此之间潜在联系强度: ```cypher MATCH (u:Movie), (v:Movie) WHERE ID(u)=<source_id> AND ID(v)=<target_id> RETURN apoc.algo.cosineSimilarity(u.features, v.features); ``` 上述表达式中调用了来自APOC插件的方法实现了快速高效的矢量空间模型比较机制[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值