图数据库Neo4j的调研

图数据库Neo4j的调研

一、neo4j基础概述

  1. 概述

neo4j作为当下最热门的图数据库之一,他的底层实现是java语言,所以安装的时候必须有jre环境。并且neo4j是根据计算机中图论理论来实现的。

neo4j图数据库主要有以下组成元素:(具体介绍可以参考下图)

  • 节点
  • 属性
  • 关系
  • 标签
  1. 安装

这是官方下载地址 Neo4j Download Center - Neo4j Graph Data Platform ,这个是社区版的。

neo4j安装包有三种类型,企业版,社区版,桌面版。

建议安装社区版,下载后解压,配置环境变量就可以使用了。

目前最新的neo4j版本是5.5.0的版本。++但是这个最新的版本要求 win10的操作系统++,由于我本机的是win7的系统,所以我安装的是 4.4.18的版本。

另外neo4j和其他的软件一样,也是可以集群部署(Cluster ),或者单机部署(Standalone)。我们这里就简单进行单机部署

二、官方样例demo

安装好后,我在本机作为window service进程在后台直接启动。neo4j的安装包中有对应的windows环境的 bat脚本,执行就可以了 。

本地连接neo4j数据库,导入官方提供的数据,就能看到官方的 数据样例了 (演员- 电影的关系)。如下图:

官方提供的势示例数据,也就是neo4j的数据库执行脚本

官方示例数据 呈现的数据模型

官方示例数据 呈现的数据模型

三、实战数据demo

这一节主要讲:

1.java 语言如何读取neo4j的数据

参考这两篇官方说明文档

Get started - Neo4j Java Driver Manual (这是neo4j的官方文档,通过驱动程序,手动连接neo4j数据库访问数据,关闭连接方式)

Spring Data Neo4j(这是spring官方文档,spring框架集成neo4j数据库,这里其实可以通过spring-data来操作neo4j,也可以是spring boot starter方式来操作neo4j)

2. excel数据导入到neo4j数据库

-- 数据导入 cql语句:

LOAD CSV WITH HEADERS FROM 'file:///tree_data/tree_data.csv' AS data CREATE (:Org{name:data.name1,orderIndex:data.index})

CREATE (:Org{name:data.name2})

CREATE (:Org{name:data.name3})

CREATE (:Org{name:data.name4})

CREATE (:Org{name:data.name5})

CREATE (:Org{name:data.name6})

CREATE (:Org{name:data.name7})

MATCH (p:Org) where p.name is null detach delete p

MATCH (entity1:Org{name:data.name2}) , (entity2:Org{name:data.name3})

with entity1,entity2

CREATE (entity1)-[:rel]->(entity2)

MATCH (entity1:Org{name:data.name3}) , (entity2:Org{name:data.name4})

with entity1,entity2

CREATE (entity1)-[:rel]→(entity2)

3. 数据备份,数据恢复

3.1) 离线备份

1)先 docker stop 原来的容器

docker stop neo4j

2) 开始数据冷备

重新启动一个临时容器进行备份

docker run --interactive --tty --rm \

--volume=/home/data/neo4j/data:/data \

--volume=/home/data/neo4j/data/db-backup:/backups \

--volume=/etc/localtime:/etc/localtime \

neo4j:4.4.16-community \

neo4j-admin dump --database=neo4j --to=/backups/`date +%Y%m%d_%H:%M`.dump

3) 数据恢复

同样是在 Neo4j 停机状态下进行数据恢复

docker run --interactive --tty --rm \

--volume=/home/data/neo4j/data:/data \

--volume=/home/data/neo4j/data/db-backup:/backups \

neo4j:4.4.16-community \

neo4j-admin load --database=neo4j --from=/backups/xxxx.dump

3.1) 在线备份

在线备份:数据备份与恢复无需停机。

离线备份:数据备份与恢复需要停机。

注意:这是企业版的 Neo4j,社区版本不支持热备。

1) 开始数据热备

docker exec --interactive --tty neo4j-new neo4j-admin backup --database=neo4j --to=/backups/`date +%Y%m%d_%H:%M`.back

2) 数据恢复

docker exec --interactive --tty neo4j-new neo4j-admin backup --backup-dir=/backups/xxx.back

四、技术架构的演进

4.1 实际项目中,使用neo4j作为底层的数据库,我们就要考虑该技术的高可用性,安全性,以及并发性能如何等问题。所以目前市面的技术架构是如何做的,

以及是否还有其他的瓶颈,市场上是否有其他可替代品等等问题,就是我们在这个时候需要考虑的问题。

五、其他类型的图数据库有哪些

1) Amazon Neptune

Amazon Neptune - 为云构建的快速、可靠的图形数据库

++Amazon Neptune++ 是一项快速、可靠且完全托管的图形数据库服务,可帮助您轻松构建和运行使用高度互连数据集的应用程序。Amazon Neptune 的核心是专门构建的高性能图形数据库引擎,它进行了优化以存储数十亿个关系并将图形查询延迟降低到毫秒级。 Amazon Neptune 支持常见的图形模型 Property Graph 和 W3C 的 RDF 及其关联的查询语言​ Apache TinkerPop Gremlin 和 SPARQL,从而使您能够轻松构建查询以有效地导航高度互连数据集。Neptune 支持图形使用案例,如建议引擎、欺诈检测、知识图谱、药物开发和网络安全。

Amazon Neptune 具有高可用性,并提供只读副本、时间点恢复、到 Amazon S3 的持续备份以及跨可用区复制等功能。Neptune 非常安全,可支持 HTTPS 加密客户端连接和静态加密。Neptune 完全托管,因此,您再也无需担心数据库管理任务,例如,硬件预置、软件修补、设置、配置或备份。

2) JanusGraph

http://www.janusgraph.cn/

3) OrientDB

OrientDB 是一个开源的多模型 NoSQL 数据库,支持原生图形、文档全文、响应性、地理空间和面向对象等概念。它使用 Java 编写,速度非常快:在普通硬件上,每秒可存储 220,000 条记录。对于文档数据库,它还支持 ACID 事务处理。

没有昂贵的运行时 JOINs,连接可作为记录之间的持久指针进行管理。你可以在几毫秒内遍历数千条记录。

OrientDB 支持 schema-less, schema-full 和 schema-mixed 这三种模式,具有基于用户和角色的强大安全性分析系统,并支持查询语言之间的 SQL

4) ArangoDB

ArangoDB是一个原生多模型数据库,兼有key/value键/值对、graph图和document文档数据模型,提供了涵盖三种数据模型的统一的数据库查询语言,并允许在单个查询中混合使用三种模型。基于其本地集成多模型特性,您可以搭建高性能程序,并且这三种数据模型均支持水平扩展。

相关推荐
数据知道3 分钟前
PostgreSQL 故障排查:万字详解如何找出数据库中的死锁
数据库·postgresql
代码栈上的思考9 分钟前
SpringBoot 拦截器
java·spring boot·spring
AI_567811 分钟前
阿里云OSS成本优化:生命周期规则+分层存储省70%
运维·数据库·人工智能·ai
送秋三十五12 分钟前
一次大文件处理性能优化实录————Java 优化过程
java·开发语言·性能优化
choke23314 分钟前
软件测试任务测试
服务器·数据库·sqlserver
龙山云仓15 分钟前
MES系统超融合架构
大数据·数据库·人工智能·sql·机器学习·架构·全文检索
雨中飘荡的记忆15 分钟前
千万级数据秒级对账!银行日终批处理对账系统从理论到实战
java
IT邦德16 分钟前
OEL9.7 安装 Oracle 26ai RAC
数据库·oracle
jbtianci20 分钟前
Spring Boot管理用户数据
java·spring boot·后端
Sylvia-girl23 分钟前
线程池~~
java·开发语言