@产品程序员我爱编程

快速兴起的小众数据库(一):为关系数据而生的Neo4j

2018-06-18  本文已影响76人  麦田里的思考者

前言

随着大数据时代的发展,诞生了一大批大数据时代下的新数据库产品,如今MongoDB、Redis、HBase这些NoSQL数据库已经成为了互联网开发的新标配,SQL一统江湖的时代不复存在了。
然而,如果你觉得只要学习了上边这几种NoSQL你就抓住了大数据时代的话,你可就大错特错了!大数据时代发展速度之快超乎你的想象,新的数据库产品仍然在不断诞生,一些快速兴起的小众数据库很有可能成为下一个MongoDB、HBase!为了不落后于时代,你还不抓紧时间了解一下?

本系列文章为大家挑选了几种适合不同场景的小众数据库。这些数据库尽管小众,但是在它们自身擅长的场景中却能够发挥出远大于大众数据库的作用。因此如果你的需求比较特殊,大众数据库产品无法很好的满足你,那么这些小众数据库没准更适合你。

这次给大家介绍的是非常适合在社交网络、智能推荐领域应用的图数据库Neo4j。

Neo4j初认识

Neo4j是现今最火爆的图数据[1]。Neo4j最早在2010年发布,背后的Neo4j公司在2016年完成了3600万美金的D轮融资,产品的发展势头还算不错。

作为图数据库,Neo4j最大的特点是关系数据的存储。
估计大部分人压根还不知道啥是图数据库。图数据库除了能够像普通的数据库一样存储一行一行的数据之外,还可以很方便的存储数据之间的关系信息。
例如,对于一个社交网络的用户数据库,你除了要存储每个用户的姓名、性别、喜好这些基本信息外,你还需要存储一个用户和哪些用户是朋友,和哪个用户是情侣这些关系数据,这个时候Neo4j这样的图数据就可以派上用场啦!

通过下图,大家可以了解下什么是图数据库以及什么是关系数据。


关系数据示例

在上图中,包含两个标签为“人”的数据节点,分别代表Ann和Dan两个用户。这两个数据节点还包含姓名、出生地等属性信息,用于表示两个用户的基本信息,就如同常规数据库中的两行数据。
除此之外,两个数据节点之间还包含两条关系数据,即Ann嫁给了Dan,Ann和Dan同居。利用这些关系数据,你就可以方便的作出基于关系的查询,例如你可以查询Ann跟谁结婚了,这就是图数据库的优势。

Neo4j的独特优势

可能有人会说,上边写的这种关系数据结构,SQL也可以通过多表join等方法实现,那要Neo4j还有什么用?但毕竟术业有专攻,对于大量、复杂的关系数据处理,Neo4j在性能和使用方便程度上都是要远胜于SQL的。下边给大家简单总结下Neo4j的优势:

Neo4j的使用场景

Neo4j简单体验

Neo4j有一套自己的查询语言,整体写法和SQL非常类似,因此对习惯SQL的用户非常友好。
例如,以下语句用于新建一个人类型的数据节点,这个人的姓名是Emil,来自Sweden。(以下教程摘自Neo4j官网[2],感兴趣的同学可以到官网查看详细教程)

CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })

以下语句则用来创建另一个人,名字叫Johan,并且他和Emil从2001年开始认识。(ee)-[:KNOWS {since: 2001}]->(js) 这段语句就相当于是为Johan和Emil建立了一个关系数据。

MATCH (ee:Person) WHERE ee.name = "Emil"
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js)

数据建立后,就可以开始见识Neo4j在关系数据处理方面的威力了。以下语句用于查询Emil的所有朋友。(出于简洁考虑省略掉了其他用户数据的创建过程)

MATCH (ee:Person)-[:KNOWS]-(friends)
WHERE ee.name = "Emil" RETURN ee, friends
Neo4j中的数据

上边的图是由Neo4j自带的图形化平台生成的。这里顺带介绍下Neo4j配套的图形化平台,真的是非常强大,能够以图形化的形式在Web中展示数据节点之间的关系,并且可以通过点击拖动等交互实现更加复杂的查询操作。


Neo4j的图形化平台

以上只是Neo4j最简单基本的使用介绍,Neo4j的功能还有很多,感兴趣的同学可以自己去官网上了解。

Neo4j的局限

Neo4j在关系数据的处理方面具备很强的性能和功能,但是为了实现这点,Neo4j也在其他方面做出了很多牺牲:

总结

综上,Neo4j对关系数据具备非常强的处理能力,如果你有类似推荐引擎、社交网络这样的关系数据应用场景,那就完全可以考虑尝试一下。


  1. https://db-engines.com/en/ranking

  2. https://neo4j.com/product/?ref=home

上一篇下一篇

猜你喜欢

热点阅读