首页 数据库 mysql教程 Neo4j数据库简介

Neo4j数据库简介

Jun 07, 2016 pm 04:09 PM
neo4j 世界 数据库 简介

作为世界先进的图数据库,Neo4j成为了时下许多互联网公司的首

作为世界先进的图数据库,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的数据结构而一个实际的图数据库例子就如下图所示的这样:\

    正是基于这样的设计理念,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) <h1> Neo4j与关系型数据库的区别</h1> <p>其实通过上述的讲解,相信大家都对neo4j与RDBMS(Relational Database Management System)的区别有了一定的认识,现在再用下面的表格来重新整理一下:</p> <table> <tbody> <tr> <td>Neo4j</td> <td>RDBMS</td> </tr> <tr> <td>允许对数据的简单且多样的管理</td> <td>高度结构化的数据</td> </tr> <tr> <td>数据添加和定义灵活,不受数据类型和数量的限制,无需提前定义</td> <td>表格schema需预定义,修改和添加数据结构和类型复杂,对数据有严格的限制</td> </tr> <tr> <td>常数时间的关系查询操作</td> <td>关系查询操作耗时</td> </tr> <tr> <td>提出全新的查询语言cypher,查询语句更加简单</td> <td>查询语句更为复杂,尤其涉及到join或union操作时</td> </tr> </tbody> </table> <p>最后再以下面两张图来展示一下两者在查询关系时的区别:<img src="/static/imghw/default1.png" data-src="http://www.68idc.cn/help/uploads/allimg/150420/0I52634N-2.png" class="lazy" alt="\">RDBMS<img src="/static/imghw/default1.png" data-src="http://www.68idc.cn/help/uploads/allimg/150420/0I5262926-3.png" class="lazy" alt="\">Neo4j</p> <p>关于Neo4j具体的安装和使用,不是文章的重点,如果想要真正上手用Neo4j,可以到Neo4j官网上面有很多资料</p> <br> <ul class="tag_box inline list-inline"> <li> </li> </ul>

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1229
24
iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 Jul 18, 2024 am 05:48 AM

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

重返奥马哈海滩!《坦克世界》推出诺曼底纪念活动 重返奥马哈海滩!《坦克世界》推出诺曼底纪念活动 May 31, 2024 pm 10:25 PM

诺曼底登陆将迎来80周年纪念,《坦克世界》一整个月的活动和特惠将围绕着“霸王行动”展开——全新的PvE模式、具有主题的战斗通行证、全新前线模式发布,以及为期一个月的诺曼底行动令牌商店即将开启。行动地图6月3日至6月30日,探索诺曼底海滩并收集最多90个诺曼底行动令牌:从该地图上获取36个、通过完成每日任务获取另外54个。查看交互式地图并了解各个活动的开始日期,然后立即开始获取令牌,或者解锁特殊的令牌任务。利用地图了解诺曼底行动相关活动的详情,获取足够的诺曼底行动令牌后,您即可前往诺曼底行动令牌商

在PHP中使用MySQLi建立数据库连接的详尽教程 在PHP中使用MySQLi建立数据库连接的详尽教程 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

如何在PHP中处理数据库连接错误 如何在PHP中处理数据库连接错误 Jun 05, 2024 pm 02:16 PM

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

抢先开启任务宝库  《战舰世界》新版本开启中 抢先开启任务宝库 《战舰世界》新版本开启中 Apr 17, 2024 pm 06:04 PM

抢先开启任务宝库,规划战斗先人一步,《战舰世界》13.3版本现已开启。了解新版本作战任务和战斗类型的所有重要信息,有助于舰长们规划整体战斗,快速获取相关奖励。13.3版本中,备受舰长期待的非对称战斗模式回归。舰长们需要操纵战舰,对抗等级上更低、但数量上更多的AI战舰。这一模式非常适合组队进行游玩,最多可由5名玩家构成小队并肩战斗,更加默契的配合,能够帮助您快速击败对方。在13.3版本期间,所有舰长都有机会集齐索姆河收藏,从而获得这艘IX级驱逐舰。这一任务的需求也非常简单,那就是在下个版本发布前赢

如何在 Golang 中使用数据库回调函数? 如何在 Golang 中使用数据库回调函数? Jun 03, 2024 pm 02:20 PM

在Golang中使用数据库回调函数可以实现:在指定数据库操作完成后执行自定义代码。通过单独的函数添加自定义行为,无需编写额外代码。回调函数可用于插入、更新、删除和查询操作。必须使用sql.Exec、sql.QueryRow或sql.Query函数才能使用回调函数。

助力B系坦歼,《坦克世界》「枪骑兵冲锋」活动开启 助力B系坦歼,《坦克世界》「枪骑兵冲锋」活动开启 Apr 19, 2024 pm 04:22 PM

全新B系自行反坦克炮研发分支刚刚加入《坦克世界》,其高等级成员可射击星形弹托APCR炮弹,能对近距离目标造成毁灭性损伤。为了欢迎这些独特坦克的到来,《坦克世界》将在4月19日17:00至4月26日17:00特别推出「枪骑兵冲锋」限时活动。该活动将开放2套任务。完成这些任务,并收集白鹰令牌。使用该令牌还可兑换自选奖励,此外,军械库和特惠商城中也将上架包含令牌的特惠礼包!·整个活动期间,系统将开放全新B系自行反坦克炮专属任务。每个任务每天可完成数次,完成任务即可获得白鹰令牌和额外乘员经验·活动每天还

如何用 Golang 连接远程数据库? 如何用 Golang 连接远程数据库? Jun 01, 2024 pm 08:31 PM

通过Go标准库database/sql包,可以连接到MySQL、PostgreSQL或SQLite等远程数据库:创建包含数据库连接信息的连接字符串。使用sql.Open()函数打开数据库连接。执行SQL查询和插入操作等数据库操作。使用defer关闭数据库连接以释放资源。

See all articles