文档章节

聊聊Neo4j图数据库的那些明显优势

大大梁
 大大梁
发布于 2017/06/12 14:20
字数 1328
阅读 11
收藏 0
点赞 0
评论 0

阅读全文

 

在高速发展的互联网应用中,业务需求的频繁变更和数据的快速增长都要求数据库必须具有很强的适应能力。Neo4j图数据库正是一个能够适应这种业务需求不断变化和大规模数据增长而产生的数据库,它不但具有很强的适应能力,而且能够自始至终保持高效的查询性能。
  现实世界中的一切事物都处在联系之中,如人际关系、电脑网络、地理数据、分子结构模型等,无一不处在纷繁复杂的联系之中。这种联系形成了一种互相关联的数据,联系才是数据的本质所在。传统的关系型数据库并不能很好地表现数据的联系,而一些NoSQL(Not Only SQL,非关系型数据库)数据库又不能表现数据之间的联系。同样是NoSQL的Neo4j图数据库是以图的结构形式来存储数据的,它所存储的就是联系的数据,是关联数据本身。
  关联数据中的联系本来就很复杂,若要在关系型数据库中使用结构化形式来表现这种联系,则一般不能直接表示,处理起来既烦琐又费事,并且随着数据的不断增长,其访问性能将日趋下降。无数的开发人员和数据库管理人员都或多或少地使用过关系型数据库,在其应用的规模化进展过程中,对于数据库的性能优化往往捉襟见肘、陷入窘境。Neo4j没有模式结构的定义,也不需要这些定义,它使用非结构化的方式来存储关联数据,所以能够直接表现数据的关联特性。
  Neo4j不管是与关系型数据库相比,还是与其他NoSQL数据库相比,都具有很多前所未有的优势,这可以从以下几个方面来分析,主要表现为查询的高性能、设计的灵活性和开发的敏捷性等。

1 高性能表现

  Neo4j是一个原生的图数据库引擎,它存储了原生的图数据,因此,可以使用图结构的自然伸展特性来设计免索引邻近节点遍历的查询算法,即图的遍历算法设计。图的遍历是图数据结构所具有的独特算法,即从一个节点开始,根据其连接的关系,可以快速和方便地找出它的邻近节点。这种查找数据的方法并不受数据量的大小所影响,因为邻近查询始终查找的是有限的局部数据,不会对整个数据库进行搜索。所以,Neo4j具有非常高效的查询性能,相比于RDBMS可以提高数倍乃至数十倍的查询速度。而且查询速度不会因数据量的增长而下降,即数据库可以经久耐用,并且始终保持最初的活力。不像RDBMS那样,因为不可避免地使用了一些范式设计,所以在查询时如果需要表示一些复杂的关系,势必会构造很多连接,从而形成很多复杂的运算。并且在查询中更加可怕的是还会涉及大量数据,这些数据大多数与结果毫无关系,有的可能仅仅是通过ID查找它的名称而已,所以随着数据量的增长,即使查询一小部分数据,查询也会变得越来越慢,性能日趋下降,以至于让人无法忍受。

2 设计的灵活性

  在日新月异的互联网应用中,业务需求会随着时间和条件的改变而发生变化,这对于以往使用结构化数据的系统来说,往往很难适应这种变化的需要。图数据结构的自然伸展特性及其非结构化的数据格式,让Neo4j的数据库设计可以具有很大的伸缩性和灵活性。因为随着需求的变化而增加的节点、关系及其属性并不会影响到原来数据的正常使用,所以使用Neo4j来设计数据库,可以更接近业务需求的变化,可以更快地赶上需求发展变化的脚步。
  大多数使用关系型数据库的系统,为了应对快速变化的业务需求,往往需要采取推倒重来的方法重构整个应用系统。而这样做的成本是巨大的。使用Neo4j可以最大限度地避免这种情况发生。虽然有时候,也许是因为最初的设计考虑得太不周全,或者为了获得更好的表现力,数据库变更和迁移在所难免,但是使用Neo4j来做这项工作也是非常容易的,至少它没有模式结构定义方面的苦恼。

3 开发的敏捷性

 

阅读全文

本文转载自:

共有 人打赏支持
大大梁
粉丝 0
博文 225
码字总数 0
作品 0
快速兴起的小众数据库(一):为关系数据而生的Neo4j

前言 随着大数据时代的发展,诞生了一大批大数据时代下的新数据库产品,如今MongoDB、Redis、HBase这些NoSQL数据库已经成为了互联网开发的新标配,SQL一统江湖的时代不复存在了。 然而,如果...

麦田里的思考者 ⋅ 06/18 ⋅ 0

NoSQL数据库大比拼 --更新中...

Redis 与CouchDB和MongoDB一样,Redis用于存储文档和由键值对组织的文件。与其他的NoSQL数据库不同的是,其存储的不仅仅是字符串或是数字,其中还包括分类和未分类的字符串集合作为与键关联的...

Dicky ⋅ 2011/10/25 ⋅ 0

Neo4j 3.3.0 发布,高性能图数据库

Neo4j 是流行的图数据库,已被数千个组织采用。它是一个高性能图形存储,具有成熟和强大的数据库的所有功能,如友好的查询语言和 ACID 事务。它将结构化数据存储在网络上而不是表中,在享有灵...

周其 ⋅ 2017/10/20 ⋅ 0

Neo4j 3.4.0-alpha04 发布,高性能图数据库

Neo4j 3.4.0-alpha04 发布了,Neo4j 是流行的图形数据库,已被数千个组织采用。它是一个高性能图形存储,具有成熟和强大的数据库的所有功能,如友好的查询语言和 ACID 事务。它将结构化数据存...

周其 ⋅ 01/03 ⋅ 2

Neo4j 3.4.0-alpha02 发布,高性能图数据库

Neo4j 3.4.0-alpha02 发布了,Neo4j 是流行的图形数据库,已被数千个组织采用。它是一个高性能图形存储,具有成熟和强大的数据库的所有功能,如友好的查询语言和 ACID 事务。它将结构化数据存...

达尔文 ⋅ 2017/11/28 ⋅ 1

Neo4j 3.3.0 beta01 发布,高性能图形数据库

Neo4j 是流行的图形数据库,已被数千个组织采用。它是一个高性能图形存储,具有成熟和强大的数据库的所有功能,如友好的查询语言和 ACID 事务。它将结构化数据存储在网络上而不是表中,在享有...

王练 ⋅ 2017/09/17 ⋅ 3

Neo4j 3.2.6, 3.1.7 和 3.0.12 发布,包含安全修复

Neo4j 3.2.6, 3.1.7 和 3.0.12 已发布,Neo4j 是流行的图形数据库,已被数千个组织采用。它是一个高性能图形存储,具有成熟和强大的数据库的所有功能,如友好的查询语言和 ACID 事务。它将结...

局长 ⋅ 2017/10/04 ⋅ 0

Neo4j 3.2.8 发布,包含关键的安全修复

Neo4j 3.2.8 已发布,Neo4j 3.2.8 是一个维护版本,包含关键的安全修复和其他重要的改进。 值得关注的更新 Causal Clustering: introducing a new cache for in-flight Raft entries Cypher...

局长 ⋅ 2017/11/21 ⋅ 0

Neo4j 3.2.5 发布,高性能图形数据库

Neo4j 是流行的图形数据库,已被数千个组织采用。它是一个高性能图形存储,具有成熟和强大的数据库的所有功能,如友好的查询语言和 ACID 事务。它将结构化数据存储在网络上而不是表中,在享有...

王练 ⋅ 2017/09/19 ⋅ 1

ArangoDB,MongoDB,Neo4j 和 OrientDB 性能比较

我近期发的博客“本地多模型的竞争”在 HN 和其他频道上引发了人们强烈的兴趣。就如预期的那样,社区里立刻建议改进公布的代码库,并且我也已经公布了几次更新(这里要特别感谢 Hans-Peter G...

oschina ⋅ 2015/06/13 ⋅ 6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CENTOS7防火墙命令记录

安装Firewall命令: yum install firewalld firewalld-config Firewall开启常见端口命令: firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-po......

cavion ⋅ 今天 ⋅ 0

【C++】【STL】利用chromo来测量程序运行时间与日志时间打印精确到微秒

直接上代码吧,没啥好说的。头疼。 #include <iostream>#include <string>#include <ctime>#include <sstream>#include <iomanip>#include <thread>#include <chrono>using ......

muqiusangyang ⋅ 今天 ⋅ 0

Mac环境下svn的使用

在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还需做一下简...

故久呵呵 ⋅ 今天 ⋅ 0

破解公司回应苹果“USB限制模式”:已攻破

本周四,苹果发表声明称 iOS 中加入了一项名为“USB 限制模式”的功能,可以防止 iPhone 在连接其他设备的时候被破解,并且强调这一功能并不是针对 FBI 等执法部门,为的是保护用户数据安全。...

六库科技 ⋅ 今天 ⋅ 0

MyBtais整合Spring Boot整合,TypeHandler对枚举类(enum)处理

概要 问题描述 我想用枚举类来表示用户当前状态,枚举类由 code 和 msg 组成,但我只想把 code 保存到数据库,查询处理,能知道用户当前状态,这应该怎么做呢?在 Spring 整合MyBatis 的时候...

Wenyi_Feng ⋅ 今天 ⋅ 0

synchronized与Lock的区别

# <center>王梦龙的读书笔记第一篇</center> ## <center>-synchronized与Lock的区别</centre> ###一、从使用场景来说 + synchronized 是能够注释代码块、类、方法但是它的加锁是和解锁使用一......

我不想加班 ⋅ 今天 ⋅ 0

VConsole的使用

手机端控制台打印输出,方便bug的排查。 首先需要引入vconsole.min.js 文件,然后在文件中创造实例。就能直接使用了。 var vConsole = new VConsole(); vConsole的文件地址...

大美琴 ⋅ 今天 ⋅ 0

Java NIO之字符集

1 字符集和编解码的概念 首先,解释一下什么是字符集。顾名思义,就是字符的集合。它的初衷是把现实世界的符号映射为计算机可以理解的字节。比如我创造一个字符集,叫做sex字符集,就包含两个...

士别三日 ⋅ 今天 ⋅ 0

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 今天 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部