作为世界先进的图数据库,neo4j成为了时下许多互联网公司的首选。neo4j是基于java开发的开源图数据库,也是一种nosql数据库。neo4j在保证对数据关系的良好刻画的同时,还支持传统关系型数据的acid特性,并且在存储效率,集群支持以及失效备援等等方面都有着不错的表现。近来因为实验室的项目的关系,对neo4j有了一定的了解。同时,我也对其设计思想和架构都产生了很大的兴趣,所以写下这篇博客,帮助大家更好地了解这一数据库,也分享一下以及的认识。
设计理念neo4j的设计动机是为了更好地同时也更高效地描述实体之间的关系。在现实生活中,每一个实体都于周围的其他实体有着千丝万缕的关系,这些关系里面所存储的信息甚至要大于身体本身的属性。然后传统的关系型数据库更注重刻画实体内部的属性,实体与实体之间的关系通常都是利用外键来实现。所以在求解关系的时候通常需要join操作,而join操作通常又是耗时的。互联网尤其是移动互联网的爆发式增长本来就使得传统关系型数据库不堪重负,再加上诸如社交网络等应用对于关系的高需求,可以说关系型数据库已经是毫无优势。而图数据库作为重点描述数据之间关系的数据库应运而生,成为了nosql中非常重要的一部分。而neo4j正是图数据库中最为优秀的之一
neo4j数据库只有两种类型的数据:
节点node:节点类似于e-r图种的实体(entity),每个实体可以有0到多个属性,这些属性以key-value对的形式存在,并且对属性没有类别要求,也无需提前定义。另外,还允许给每个节点打上标签,以区别不同类型的节点。关系relationship: 关系类似于e-r图种的关系(relationship),一个关系有一个起始节点和一个终止节点构成。另外和node一样,关系也可以有多个属性已经标签其具体的结构如下图:而一个实际的图数据库例子就如下图所示的这样:
正是基于这样的设计理念,neo4j有了以下这些特性:喎?http://www.2cto.com/kf/ware/vc/ target=_blank class=keylink>vcd4kphvspgo8bgk+udjptdtatls9qlxeyrg68r7n0tg+rcq1z9bby6os0vk2+ntasunrr7nyz7w1xmqxuvlkx9k7upzpkdeptcsy2df3pgxppsv509c1xlnyz7xu2k5lbzrq1tc2vmrhzay1ynby0qq1xdxsat7m4bmpwcvnvlxeye62ynpfz8jl0cv3oak547bi08xpymvry/ehotfutszct762oak88rwlwre+ttlrvq1eawprc3ryybxitcjl47eocjxomt4ktmvvngq1xltmtkk94bm5pc9omt4kpha+z9bu2sjdztldx8c0v7s/tmr9vt3u2k5lbzrq1tdkx8jnus605rsitcsjrmrxz8jkx73atenob2rltcqmizi2njg0o8q9o7ogtm9kztppbl91c2uoynl0zskmizqzo25lehrfcmvsx2lkkgludckmizqzo25lehrfchjvcf9pzchpbnqplmo/0rvou7xevt/m5dli0uxi58/co7o8l3a+cjx1bd4kpgxppmlux3vzztoxse3kvrjdvdq147g7yrntw6osmlhtyr6xu8m+s/08bgk+bmv4df9yzwxfawqoaw50ktq4w73ateppwtk7upa52m+1awq8bgk+bmv4df9wcm9wx2lkkgludck6umo92rxjz8lsu7j2yvtq1lxeawqkpha+umvsyxrpb24mizi2njg0o8q9o7ogaw5fdxnljim0mztmaxjzdf9ub2rljim0mztzzwnvbmrfbm9kzsyjndm7cmvsx3r5cgumizqzo2zpcnn0x3byzxzfcmvsx2lkjim0mztmaxjzdf9uzxh0x3jlbf9pzcyjndm7c2vjb25kx3byzxzfcmvsx2lkjim0mztzzwnvbmrfbmv4df9yzwxfawqmizqzo25lehrfchjvcf9pzdwvcd4kphvspgo8bgk+aw5fdxnllg5lehrfchjvcf9pzdrnrmnppgxppmzpcnn0x25vzgu6tbhhslnyz7w1xmbwyry92rxjpgxppnnly29uzf9ub2rlorwxx7c52m+1tctw1da5vdq14zxsat5yzwxfdhlwztq52m+1wodqztxsat5maxjzdf9wcmv2x3jlbf9pzcamyw1woybmaxjzdf9uzxh0x3jlbf9pzdrg8mq8vdq147xex7dsu7j2us2689k7upa52m+1awq8bgk+c2vjb25kx3byzxzfcmvsx2lkiczhbxa7ihnly29uzf9uzxh0x3jlbf9pzdrw1da5vdq147xex7dsu7j2us2689k7upa52m+1awqkpha+z+dqxb+0wcu05sr9veg5udauuvojrltzvnlwqrxazqrksso0tmvvngru2rlp0a+92rxjudjptbxeyrg68rvhyoe0y9auv+zby6os0vloqso/0ru49r3atept0mte0km52m+1trzkx9axvdo05ttaumo92rxjtcs2qnll0/le2rxeo6zwsb3tt8poyr7n0ndby6osupmxvrk70ojsqttzykwy6dxswe3n4tk71cwx7agjpc9wpgo8cd7pwspmvtnsu7j2zby1xlhpwpq1xmd919ojujwvcd4kphvspgo8bgk+tno92rxjmb+qyryjrl/ttsjtxc/isena+qosxus05rsiveg5uc6qo7owmsawmdawmdawmibmzmzmzmzmzjxsat7g5m/c0ru49rnyz7vpzmrhmqost8poyrnyz7uyo7owmsawmdawmdawmsawmdawmdawncagmdawmdawmdagicbmzmzmzmzmziawmdawmdawmsagigzmzmzmzmzmigzmzmzmzmzmicagigzmzmzmzmzmilxds/zub2rlideglsznddsgbm9kzsa0lm2syrhpwrj2udjptcrhmtxsat652m+1mao6idaxidawmdawmdaxidawmdawmdazicawmdawmdawmcagidawmdawmdayidawmdawmdawicagmdawmdawmdmgzmzmzmzmzmygicagzmzmzmzmzmygbm9kzteglsznddsgbm9kzsazlg5vzguzinpqxutl+7nyz7wjrmv50ts9q25vzguztobi67btwdcjrm2syrg3w87kudjptta8bgk+udjpttcjujaxidawmdawmdaxidawmdawmdayicawmdawmdawmcagidawmdawmdaxigzmzmzmzmzmicagzmzmzmzmzmygzmzmzmzmzmygicagzmzmzmzmzmygbm9kzteglsznddsgbm9kztkjrlfdzsrn6rpjbm9kztg1xmv509c52m+1o6y007btwddw0m3ls/zub2rlmzxsat7tw9payc/oxm/gzay1xle9t6i3w87kbm9kztm8bgk+1+66873hufvi58/co7okpgjsb2nrcxvvdgu+cgo8chjlignsyxnzpq==brush:sql;>(1)–[knows,2]–>(4)(1)–[knows,1]–>(3)(1)–[knows,0]–>(2)(1)–[knows,1]–>(3)–[knows,5]–>(7)(1)–[knows,1]–>(3)–[knows,4]–>(6)(1)–[knows,1]–>(3)–[knows,3]–>(5)neo4j与关系型数据库的区别其实通过上述的讲解,相信大家都对neo4j与rdbms(relational database management system)的区别有了一定的认识,现在再用下面的表格来重新整理一下:
neo4j rdbms
允许对数据的简单且多样的管理 高度结构化的数据
数据添加和定义灵活,不受数据类型和数量的限制,无需提前定义 表格schema需预定义,修改和添加数据结构和类型复杂,对数据有严格的限制
常数时间的关系查询操作 关系查询操作耗时
提出全新的查询语言cypher,查询语句更加简单 查询语句更为复杂,尤其涉及到join或union操作时
最后再以下面两张图来展示一下两者在查询关系时的区别:rdbmsneo4j
关于neo4j具体的安装和使用,不是文章的重点,如果想要真正上手用neo4j,可以到neo4j官网上面有很多资料
