图数据库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文档数据模型,提供了涵盖三种数据模型的统一的数据库查询语言,并允许在单个查询中混合使用三种模型。基于其本地集成多模型特性,您可以搭建高性能程序,并且这三种数据模型均支持水平扩展。

相关推荐
GoodStudyAndDayDayUp7 分钟前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
独行soc12 分钟前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain31 分钟前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship31 分钟前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站35 分钟前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶37 分钟前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
n北斗1 小时前
常用类晨考day15
java
骇客野人1 小时前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言
yuanbenshidiaos2 小时前
c++---------数据类型
java·jvm·c++
向宇it2 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎