为什么需要图数据库

单地说,数据库主要用于存储更多的连接数据(因为图结构相比其他数据结构而言,能保存更多的数据间的关系)。

使用 RDBMS 数据库来存储更多连接的数据,那么它们不能提供用于遍历大量数据的适当性能。 在这些情况下,Graph Database 提高了应用程序性能。

如今,大多数社交网络应用程序(如Facebook,Google +,LinkedIn,Twitter,Yammer 等)和视频托管应用程序(如 Google YouTube,Flickr,Yahoo Video等)都在使用更多连接的数据。

Neo4j-简介

Neo4j是由 Java 实现的开源 NoSQL 图数据库。Neo4j实现了专业数据库级别的图数据模型的存储。与普通的图处理或内存数据库不同,Neo4j 提供了完整的数据库特性,包括 ACID 事务的支持、集群支持、备份与故障转移等,这使其适合于企业级生产环境下各种应用。

Neo4j-数据模型

Neo4j图数据库遵循属性图模型来存储和管理其数据。

  1. 属性图模型规则

    • 表示节点,关系和属性中的数据
    • 节点和关系都包含属性
    • 关系连接节点
    • 属性是键值对
    • 节点用圆圈表示,关系用方向键表示
    • 关系具有方向:单向和双向
    • 每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”
  2. 图形数据库数据模型的主要构建块是:

    • 节点
    • 关系
    • 属性

简单属性例子
在这里插入图片描述
这里使用圆圈表示节点。 使用箭头的关系。 关系是有方向性的。 可以用Properties(键值对)来表示Node的数据。 在这个例子中,在Node的Circle中表示了每个Node的Id属性。

Neo4j-图形理论基础

图是一组节点和连接这些节点的关系。图形数据存储在节点和关系在属性的形式。属性是键值对表示数据。

图形是一组节点和连接这些节点的关系。 图形以属性的形式将数据存储在节点和关系中。 属性是用于表示数据的键值对。

在图形理论中,我们可以表示一个带有圆的节点,节点之间的关系用一个箭头标记表示。

最简单的可能图是单个节点。
在这里插入图片描述

可以使用节点表示社交网络(如Google+(GooglePlus)个人资料)。 它不包含任何属性。

向 Google+个人资料添加一些属性

在这里插入图片描述

此节点包含一组属性。 属性是一个名称:值对。

在两个节点之间创建关系

在这里插入图片描述
复杂的示例图
在这里插入图片描述
这里节点用关系连接。 关系是单向或双向的。

  • 从PQR到XYZ的关系是单向关系。
  • 从ABC到PQR的关系是双向关系。

Docker 部署 Neo4j

下载镜像

第一步,从镜像源中找合适的镜像
docker search neo4j
在这里插入图片描述
第二步,拉取镜像源
docker pull neo4j(:版本号) //缺省 “:版本号” 时默认安装latest版本的

第三步,查看本地镜像,检验是否拉取成功
docker images
在这里插入图片描述

构建 Neo4j 容器

第一步,在你根目录的任意一个子目录(我这里是/home)下建立四个基本的文件夹

data——数据存放的文件夹
logs——运行的日志文件夹
conf——数据库配置文件夹(在配置文件neo4j.conf中配置包括开放远程连接、设置默认激活的数据库)
import——为了大批量导入csv来构建数据库,需要导入的节点文件nodes.csv和关系文件rel.csv需要放到这个文件夹下)

docker run -d --name container_name \  //-d表示容器后台运行 --name指定容器名字
	-p 7474:7474 -p 7687:7687 \        //映射容器的端口号到宿主机的端口号
	-v /home/neo4j/data:/data \        //把容器内的数据目录挂载到宿主机的对应目录下
	-v /home/neo4j/logs:/logs \        //挂载日志目录
	-v /home/neo4j/conf:/var/lib/neo4j/conf   //挂载配置目录
	-v /home/neo4j/import:/var/lib/neo4j/import \  //挂载数据导入目录
	--env NEO4J_AUTH=neo4j/password \  //设定数据库的名字的访问密码
	neo4j //指定使用的镜像

其中container_name可以自己指定,挂载在根目录下的子目录可以根据你自己的实际情况进行替换,我这里是/home。另外NEO4J_AUTH也是你自己来进行设置。

执行完上述命令后就在后台把neo4j容器启动起来了,这个时候你就能在宿主机的浏览器中输入
localhost:7474

输入用户名和密码就能登录到数据库了。

在这里插入图片描述

配置 Neo4j

上述方式启动的neo4j是按照默认的配置进行启动的,而默认的数据库配置是不允许远程登陆的,这样对于在服务器上使用docker搭载neo4j的同学来说,就很不方便了。所以我们对默认配置进行一些改变,改变如下:

// 进入容器配置目录挂载在宿主机的对应目录,我这里是/home/neo4j/conf
cd /home/neo4j/conf

// vim编辑器打开neo4j.conf
vim neo4j.conf

// 进行以下更改
//在文件配置末尾添加这一行
dbms.connectors.default_listen_address=0.0.0.0  //指定连接器的默认监听ip为0.0.0.0,即允许任何ip连接到数据库

//修改
dbms.connector.bolt.listen_address=0.0.0.0:7687  //取消注释并把对bolt请求的监听“地址:端口”改为“0.0.0.0:7687”
dbms.connector.http.listen_address=0.0.0.0:7474  //取消注释并把对http请求的监听“地址:端口”改为“0.0.0.0:7474”

保存后退出,重启neo4j容器,可以使用容器的省略id或者生成容器时指定的容器名进行重启。

docker restart 容器id(或者容器名)

防火墙设置

// 查看当前防火墙状态,若为“inactive”,则防火墙已关闭,不必进行接续操作。
sudo ufw status

// 若防火墙状态为“active”,则使用下列命令开放端口
sudo ufw allow 7474
sudo ufw allow 7687

// 重启防火墙
sudo ufw reload

Cypher 查询语句

Neo4j拥有自己的查询语言Cypher,在这里不做过多介绍。(可以参考这篇文章<<Cypher查询语言–Neo4j中的SQL>>

参考

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐