
图数据库-Neo4j
为什么需要图数据库
单地说,数据库主要用于存储更多的连接数据(因为图结构相比其他数据结构而言,能保存更多的数据间的关系)。
使用 RDBMS 数据库来存储更多连接的数据,那么它们不能提供用于遍历大量数据的适当性能。 在这些情况下,Graph Database 提高了应用程序性能。
如今,大多数社交网络应用程序(如Facebook,Google +,LinkedIn,Twitter,Yammer 等)和视频托管应用程序(如 Google YouTube,Flickr,Yahoo Video等)都在使用更多连接的数据。
Neo4j-简介
Neo4j是由 Java 实现的开源 NoSQL 图数据库。Neo4j实现了专业数据库级别的图数据模型的存储。与普通的图处理或内存数据库不同,Neo4j 提供了完整的数据库特性,包括 ACID 事务的支持、集群支持、备份与故障转移等,这使其适合于企业级生产环境下各种应用。
Neo4j-数据模型
Neo4j图数据库遵循属性图模型来存储和管理其数据。
-
属性图模型规则
- 表示节点,关系和属性中的数据
- 节点和关系都包含属性
- 关系连接节点
- 属性是键值对
- 节点用圆圈表示,关系用方向键表示
- 关系具有方向:单向和双向
- 每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”
-
图形数据库数据模型的主要构建块是:
- 节点
- 关系
- 属性
简单属性例子
这里使用圆圈表示节点。 使用箭头的关系。 关系是有方向性的。 可以用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>>)
参考
更多推荐
所有评论(0)