随着互联网不断的发展,传统的关系型数据库如oracle,mysql已经难以支撑现下大数据量,高并发的场景了。于是,NoSQL横空出世,有像cassandra这样的column-based,像MongoDB这样document-based。今天在这里猎奇的是一个graph-based的数据库,Neo4j。

什么是图数据库

图数据库名字的由来其实与其在底层的存储方式有关,Neo4j底层会以图的方式把用户定义的节点以及关系存储起来,通过这种方式,可是高效的实现从某个节点开始,通过节点与节点间关系,找出两个节点间的联系。

从这段描述中可以猜得到,在Neo4j中最重要的两个元素就是节点和关系。说到节点和关系,就必须引出一个非常重要的概念,属性图模型(Property Graph Model)。如下所示:

 
 
  • 一个图中会记录节点和关系
  • 关系可以用来关联两个节点
  • 节点和关系都可以拥有自己的属性
  • 可以赋予节点多个标签(类别)

接下来用一个实际的例子来解释下这个模型,最近在虎扑上被吹捧的特别厉害的恩比德大帝曾经爆出过他自己PS的一张图,隔空示爱蕾哈娜,参考下图

 
 

我们尝试用Property Graph Model来表示这样的一个关系。

 
 

上图中定义了两个节点,恩比德和蕾哈娜,类别分别是球员和歌手,分别拥有身高,国籍以及生日,血型属性。两个节点之间通过一个“喜欢”关系关联,“喜欢”关系拥有自己的一个属性“自从”,属性值为2014年。

Neo4j数据库的优势
  • 在创建节点的时候就已经把关系给建立起来,避免了在复杂查询场景下的处理
  • 由于底层直接以图的形式存储节点和关系,在查询的时候可以使时间复杂度保持在常数级别。
  • 基于JVM实现
  • 提供一套易于理解的查询语言Cypher以及内置的可视化UI
  • 很好的支持ACID,有事务机制
Neo4j安装及实践

为了方便大家搭建环境,本文还是会用Docker来运行一个包含Neo4j的容器,Docker下载安装参考这里。在下文中会根据之前引用的恩比德大帝的例子来介绍Cypher语句。

从Docker Hub上pull一个Neo4j的镜像

docker pull neo4j

启动一个Neo4j的容器, 需要在你的Home目录下建立一个/neo4j/data文件夹

docker run --publish=7474:7474 --publish=7687:7687 --volume=$HOME/neo4j/data:/data neo4j

在浏览器中访问loalhost:7474可以看到如下的UI界面,输入默认用户名和密码neo4j即可连接到neo4j数据库。

 
 

创建一个球员节点恩比德

CREATE (embiid: PLAYER {name: 'Embiid', height: '2.13m', nationality: 'Cameroon'})
 
 

可以通过点击Neo4j左边的侧边栏中的PLAYER标签看到刚才新建的节点。

 
 

创建歌手蕾哈娜节点以及“喜欢”关系

MATCH (embiid:PLAYER{name:'Embiid'})
MERGE (embiid)-[:LIKES{since:'2014'}]->(Rihanna: SINGER{name:'Rihanna', dob:'1988/2/20',bloodType:'O'})
 
 

创建完以后UI如下图所示,图中可以看出新建的蕾哈娜节点和之前的恩比德节点通过LIKES关系关联了起来

 
 

查询返回所有喜欢蕾哈娜的PLAYER节点

MATCH(p:PLAYER)-[:LIKES]->(:SINGER{name:'Rihanna'})
RETURN p;
 
 
 
 
Neo4j常用使用场景
  • 社交网络
  • 基于图的搜索
  • 推荐引擎
  • 企业基础设施及网络架构
  • 等等等
结语:

本文简单扼要的介绍了Neo4j这个比较小众的数据库的概念和使用方法,相信在这个数据为王的时代,图数据库可以从其它各类数据库中脱颖而出,获得一席之地。

作者:BlairWaldorf
链接:https://www.jianshu.com/p/97c6752e928b
來源:简书

10分钟上手图数据库Neo4j的更多相关文章

  1. 10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)

    1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1) ...

  2. 5分钟了解图数据库Neo4j的使用

    1.图数据库安装与配置 1.1安装与配置 配置path = %NEO4J_HOME%\bin   启动命令:neo4j console   web访问:http://localhost:7474 1. ...

  3. Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库

    前言     在 .Net Core 2.2中 Microsoft.AspNetCore.App 默认内置了EntityFramework Core 包,所以在使用过程中,我们无需再从 NuGet 仓 ...

  4. 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange

    如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...

  5. [转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则

    转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离 ...

  6. 【MySQL】花10分钟阅读下MySQL数据库优化总结

    1.花10分钟阅读下MySQL数据库优化总结http://www.kuqin.com2.扩展阅读:数据库三范式http://www.cnblogs.com3.my.ini--->C:\Progr ...

  7. 10分钟教你用VS2017将代码上传到GitHub

    前言 关于微软的Visual Studio系列,真可谓是宇宙最强IDE了.不过,像小编这样的菜鸟级别也用不到几个功能.今天给大家介绍一个比较实用的功能吧,把Visual Studio 2017里面写好 ...

  8. 史上最简单的vi教程,10分钟包教会

    从第一次接触vi/vim到现在已经十几年了,在这个过程中,来来回回,反反复复,学习vi很多次了. 虽然关于vi的使用,我还远未达到"专家"的水平,但对于vi的使用,我有话说. 1. ...

  9. 史上!最最最简洁明了的 Java JDK 安装目录及其子目录含义 10分钟详解 - 精简归纳

    Java JDK 安装目录及其子目录含义 10分钟详解 - 精简归纳 JERRY_Z. ~ 2020 / 8 / 30 转载请注明出处!️ 目录 Java JDK 安装目录及其子目录含义 10分钟详解 ...

随机推荐

  1. Codeforces 300C Beautiful Numbers 【组合数】+【逆元】

    <题目链接> 题目大意: 给出a和b,如果一个数每一位都是a或b,那么我们称这个数为good,在good的基础上,如果这个数的每一位之和也是good,那么这个数是excellent.求长度 ...

  2. POJ2387 Til the Cows Come Home【Kruscal】

    题目链接>>> 题目大意: 谷仓之间有一些路径长度,然后要在这些谷仓之间建立一些互联网,花费的成本与长度成正比,,并且要使这些边连起来看的像一课“树”,然后使成本最大 解题思路: 最 ...

  3. metasploit支持利用的CVE

    因为需要添加许多漏洞的流量检测,所以需要模拟很多漏洞的利用过程,简单来说,就是抓漏洞利用过程的流量. 一个脚本对metasploit中的module中包含的cve字段进行提取,而后去重,得出metas ...

  4. Manacher学习笔记

    目录 code(伪) Manacher算法 可在 \(O(n)\)的时间内求出一个字符串以每个位置为中心的最长回文子串. 原理:根据之前预处理出的回文串长度求得新的回文串长度 我们可以通过在字符中加上 ...

  5. 【树形期望DP】BZOJ3566- [SHOI2014]概率充电器

    [题目大意] 充电器由 n-1 条导线连通了 n 个充电元件.这n-1条导线均有一个通电概率p%,而每个充电元件本身有直接被充电的概率q[i]%.问期望有多少个充电元件处于充电状态? [思路] 第一次 ...

  6. windows安装channels报错的解决方案

    windows作为开发机真是让人又爱又恨,总是会遇到各种各样的问题 报错 以安装channels为例:如: pip install channels   时出现: error: Microsoft V ...

  7. [三边定位] C# 演示程序

    计划用CC2530做定位,网上找了一些求圆交点的程序, 修改成3个圆求交点的质心,感觉算法还行. 粗略写了一下程序,结果还行. 现在只能手动输入3个圆的信息. 后面需要再优化. 全部未优化的程序: u ...

  8. Apache JMeter5 设置中文

    Apache JMeter5 下载: apache-jmeter-5.0.zip apache-jmeter-5.0.tgz 注意:JMeter5需要Java8 以上,本文环境是Win7 64位 1. ...

  9. 解决VS Code开发Python3语言自动补全功能不带括号的问题

    Visual Studio Code(以下简称VS Code)用来开发Python3,还是很便利的,本身这个IDE就是轻量级的,才几十兆大小,通过安装插件的方式支持各种语言的开发.界面也美美哒,可以在 ...

  10. python系统编程(十)

    多线程-非共享数据 对于全局变量,在多线程中要格外小心,否则容易造成数据错乱的情况发生 1. 非全局变量是否要加锁呢? #coding=utf-8 import threading import ti ...