Neo4J图库的基础介绍(一)

•Neo4j是一个高性能的,NOSQL图形数据库,它彻底支持ACID(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability))数据库事务属性,采用JAVA语音编写,因为其良好的图数据模型设计,Neo4j的速度很是快。对于链接的数据操做,Neo4j的速度要比传统的关系型数据库快1000倍。部署一个neo4j服务器即可以承载上亿级的节点和关系。当单节点没法承载咱们的数据需求时,咱们能够进行分布式集群部署.
 
•一个图由无数的节点和关系组成
•“一张图 – 数据记录在 → 节点 → 包括的 → 属性里面”
•最简单的图是单节点的,一个记录,记录了一些属性。一个节点能够从单属性开始,成长为成千上亿,虽然会有一点点麻烦。从某种意义上讲,将数据用关系链接起来分布到不一样节点上才是有意义的。
“节点 — 被组织 → 关系 — 能够有 → 属性”
关系能够将节点组织成任意的结构,容许一张图被组织成一个列表,一棵树,一张地图,或者一个复杂的实体 – 这个实体自己也是由复杂的,关系高度关联的结构组成。
•“一个索引 — 映射到 → 属性 — 属于 → 节点或者关系”
•常常,你想经过某一给定的属性值找到节点或者关系。比起经过遍历咱们的图来书,用索引将会更加高效。好比“找到用户名是tony的用户”。
 
 
 
节点
•构成一张图的基本元素是节点和关系。在Neo4j中,节点和关系均可以包含属性。
•节点常常被用于表示一些_实体_,但依赖关系也同样能够表示实体。
一个最简单的节点,他只有一个属性,属性名是 name, 属性值是 Marko
 
关系
•节点之间的关系是图数据库很重要的一部分。经过关系能够找到不少关联的数据,好比节点集合,关系集合以及他们的属性集合。
一个关系链接两个节点,必须有一个开始节点和结束节点。
•由于关系老是直接相连的,因此对于一个节点来讲,与他关联的关系看起来有输入/输出两个方向,这个特性对于咱们遍历图很是有帮助:
 
 
•为了未来加强遍历图中全部的关系,咱们须要为关系设置类型。注意 关键字 type 在这可能会被误解,你其实能够把他简单的理解为一个标签而已。
•下面的例子是一个有两种关系的最简单的社会化网络图。
 
 
 
•节点和关系均可以设置本身的属性。
•属性是由Key-Value键值对组成,键名是字符串。属性值是要么是原始值,要么是原始值类型的一个数组。好比+String+,+int+和i+int[]+都是合法的。
 
 
•路径:路径由至少一个节点,经过各类关系链接组成,常常是做为一个查询或者遍历的结果。
 
 
 
•最短的路径是0长度的像下面这样:
 
 
•长度为1的路径以下:
 
 
社交关系图
 
 
•遍历(Traversal):遍历一张图就是按照必定的规则,跟随他们的关系,访问关联的的节点集合。最多的状况是只有一部分子图被访问到,由于你知道你对那一部分节点或者关系感兴趣。
•Neo4j提供了遍历的API,可让你指定遍历规则。最简单的设置就是设置遍历是宽度优先仍是深度优先。
•Traversal.preorderDepthFirst(): 深度优先,在访问的子节点以前访问每个节点。
•Traversal.postorderDepthFirst(): 深度优先,在访问的子节点以后访问每个节点。
•Traversal.preorderBreadthFirst(): 宽度优先,在访问的子节点以前访问每个节点。
•Traversal.postorderBreadthFirst(): 宽度优先,在访问的子节点以后访问每个节点。
•增长一个关系类型到遍历的关系类型列表中。 默认状况下,这个列表是空的,意味着默认会返回 全部类型 的关系,而不考虑类型。 若是有关系被加入到这个列表中,那就意味着 只有 列表中的关系才会被遍历。 有两个方法,一个是包括方向,另一个是排除方向,这个方法中遍历关系是双向的。
 
 
 
经过引入一个正确的Java库就能够将Neo4j放入项目中,在选择了适合你的平台的版本后,经过引入jar包到你的应用中来完成嵌入Neo4j,在嵌入式的模式下,Neo4j能够和应用程序运行于同一个进程,嵌入式的优势:
一、低延迟,直接与数据库对话,没有网络开销。
二、任选API,能够全范围的访问建立和查询数据的API,包括Neo4j的核心API,遍历框架和Cypher查询语音
三、嵌入式模式提供了对命名索引的建立和管理的彻底控制。
嵌入式缺点:
一、仅能应用于JVM,Neo4j是基于JVM的数据库,所以它的不少API仅能经过基于JVM的语音访问。
二、GC的行为,主机的应用程序垃圾回收器的行为会对Neo4j产生影响,而且当嵌入式实例运行于HA集群时,长期的GC暂停可能会使集群协议触发主节点重选
三、应用程序负责控制数据库的生命周期,包括启动和关闭。嵌入式版本的Neo4j和服务器版本的Neo4j同样,也能够作成集群。也能够将嵌入式和服务器版本的Neo4j作混合集群。
 
Neo4j能够做为一个独立服务器访问,能够直接经过一个REST接口或者一个基于指定语言的驱动。
一、REST API:服务器提供了REST API接口,容许客户端经过http请求发送JSON格式的请求,响应包括JSON格式的消息响应。
二、平台独立性:因为访问是经过HTTP发送的JSON格式的文档,所以Neo4j服务器能够被运行于任何平台的客户端访问。
三、Neo4J以服务器模式运行时,能够独立于应用服务器。
四、与应用程序的GC行为隔离,服务器模式中,任何应用程序的不良GC行为都不会影响Neo4j。
五、网络开销:在接收到第一个客户端请求以后,TCP连接会保持开启状态,知道客户端关闭。
六、每一个请求的事务:每一个客户端的请求都在一个单独的事务上下文中被执行。
七、开发者能够本身扩展REST API,扩展采起JAX-RS注解类(annotated class)的形式。
 
 
相关文章
相关标签/搜索