概述
Neo4j 是一个高性能的 NoSQL 图形数据库,并且完全支持 ACID(原子性、一致性、隔离性、持久性)数据库事务属性;采用 Java 语言编写,由于其良好的图形数据模型设计,Neo4j 的数据非常快。
部署一个neo4j服务器便可以承载上亿级的节点和关系。单单节点无法承载我们的数据需求时,可以进行分布式集群部署。
Neo4j 特点和优势
Neo4j 的特点
- SQL 就像简单的查询语言 Neo4j CQL;
- 遵循属性图数据模型;
- 使用 Apache Lucence 支持索引;
- 支持 UNIQUE 约束;
- 包含一个用于执行 CQL 命令的 UI:Neo4j 数据浏览器;
- 支持完整的 ACID(原子性、一致性、隔离性、持久性)规则;
- 采用原生图形库与本地 GPE(图形处理引擎);
- 支持查询的数据导出到 JSON 和 XLS 格式;
- 提供 REST API,可以被任何编程语言(如Java、Spring、Scala等)访问;
- 提供了可以通过任何 UI MVC 框架(如 Node JS)访问的 Java 脚本;
- 支持两种 Java API:Cypher API 和 Native Java API 来开发 Java 应用程序;
Neo4j 的优点
- Neo4j 很容易表示连接的数据;
- 检索 / 遍历 / 导航更多的连接数据是非常容易和快速的;
- 非常容易的表示半结构化数据;
- Neo4j CQL 查询语言命令是人性化的可读格式,易于学习;
- 使用简单而强大的数据模型;
- 不需要复杂的连接来检索连接的 / 相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引;
Neo4j 的缺点或限制
- AS 的 Neo4j 2.1.3 最新版本,它具有支持节点数,关系和属性的限制;
- 不支持 Sharding;
Neo4j 数据模型
Neo4j 属性图形数据模型
Neo4j 图形数据库遵循属性图模型来存储和管理其数据。
属性图模型规则
- 表示节点,关系和属性中的数据;
- 节点和关系都包含属性;
- 关系连接节点;
- 属性是键值对;
- 节点用圆圈表示,关系用方向键表示;
- 关系具有方向:单向和双向;
- 每个关系包含 “开始节点” 或 “从节点” 和 “到节点” 或 “结束节点”;
在属性图数据模型中,关系应该是定向的。如果尝试创建没有方向的关系,将会抛出错误信息。
Neo4j 图数据库将其所有数据存储在节点和关系中,不需要额外的 RRBMS数据库 或 无SQL数据库 来存储 Neo4j 数据库数据,以图形的形式存储其数据的本机格式。
Neo4j 使用本机 GPE(图形处理引擎)引擎来使用它的本机图存储格式。图形数据库数据模型的主要构建块:
- 节点
- 关系
- 属性
Neo4j 图形理论基础
- 图形是一组节点和连接这些节点的关系;
- 图形数据存储在节点和关系在属性的形式;
- 圆表示节点;
- 属性是键值对表示数据;
- 箭头表示节点间的关系;
- 复杂的关系图(单向、双向关系);
- 从 XYZ 到 PQR 的关系是单向关系;
- 从 ABC 到 XYZ 的关系是双向关系;
Neo4j 构建模块
Neo4j 图数据库主要有一下构建块
- 节点:是图表的基本单位。它包含具有键值对属性;这里 Node Name = “Employee”,包含一组属性作为键值对。
- 属性:属性是用于描述图节点和关系的键值对,Key = 值;
- Key 是一个字符串
- 值可以通过使用任何 Neo4j 数据类型来表示
- 关系:图形数据库的另一个主要构建快,连接两个节点;
- Emp起始节点、Dept结束节点。
- Works-For是Emp、Dept节点之间的关系,包含属性作为键值对 ID=123;
- 标签:Lable 将一个公共名称与一组节点或关系相关联。节点或关系可以包含一个或多个标签。可以为现有节点或关系和创建新、删除标签。
- Emp、Dept 都是节点标签;
- Work_For 都是关系标签;
- 数据浏览器:Neo4j 自带的数据浏览器,http://xxx.xxx.xxx.xxx:7474/browser
- 用于执行 CQL 命令并查询输入输出;
- $ 提示符出执行所有 CQL 命令;