图数据库Neo4j的调研
一、neo4j基础概述
- 概述
neo4j作为当下最热门的图数据库之一,他的底层实现是java语言,所以安装的时候必须有jre环境。并且neo4j是根据计算机中图论理论来实现的。
neo4j图数据库主要有以下组成元素:(具体介绍可以参考下图)
- 节点
- 属性
- 关系
- 标签
2. 安装
这是官方下载地址 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文档数据模型,提供了涵盖三种数据模型的统一的数据库查询语言,并允许在单个查询中混合使用三种模型。基于其本地集成多模型特性,您可以搭建高性能程序,并且这三种数据模型均支持水平扩展。