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

前言

随着大数据时代的发展,诞生了一大批大数据时代下的新数据库产品,如今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的优势:

  • 数据底层存储专门针对图数据的特点进行优化,在关系数据的处理上具备远高于其他数据库的性能
  • 专门为关系数据设计的查询语言,对于关系数据的操作更加的方便。
  • 没有表结构这个概念,相较SQL在使用上更加灵活。
  • 自动为数据建立合适的索引(根据数据的标签),免去管理索引的麻烦。
  • 支持高可用性主从集群部署。
  • 具备图形化平台等配套工具,帮助开发者快速构建出完整的关系数据平台。

Neo4j的使用场景

  • 社交网络:根据用户与其他用户的关系为用户推荐新的朋友。例如,在QQ中给你推荐朋友的朋友 。
  • 智能推荐引擎:通过分析用户有哪些朋友、用户朋友喜好的产品、用户的浏览记录等关系信息推测用户的喜好进而为用户推荐商品。
  • 知识图谱:根据知识点之间的关系建立知识图,帮助用户搜索到关联的知识。例如,在百度上搜索Neo4j,会同时出现MySQL等类似的内容。
  • 恶意软件检测:通过记录软件行为的各种关系数据,例如其访问了哪些IP、访问了哪些系统资源,进而分析软件行为是否具有恶意。
  • 网络、数据中心管理:网络、数据中心这些基础设施自身就是一个包含复杂关系的网络,利用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对于关系数据以外的复杂查询支持不佳,例如range、复杂聚合,更不用说SQL中的多表查询了。
  • 性能低于常规NoSQL。受限于图数据的复杂性,Neo4j在性能上尤其是写性能上明显弱于MongoDB这类NoSQL,并且在性能水平扩展上也比较受限。
  • 缺乏原生分片支持,容量水平扩展上比较受限。
    因此,Neo4j仅仅适用于包含大量关系数据的场景中,如果你的数据模型并没有包含太多关系结构,还是老老实实的用MySQL、MongoDB这些常规数据库吧。

总结

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


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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容