最近这段时间一直在搞知识图谱的一个项目,有点忙,所以博客更新有点慢,现在第一阶段的开发基本完活,后面有空会总结几篇与neo4j有关的文章。
有关neo4j的介绍和使用场景,这里不多说了,不了解的朋友可以参考我之前的文章
http://qindongliang.iteye.com/blog/2327919
我们的使用场景是用来存知识图谱有关的数据简单说就是会把从小学到高中所有的科目的里面的知识点给存储起来,让后建立知识点与知识点之间的依赖关系,从而最终会形成一张复杂的知识网络。举个例子:
比如某个学生,要学习化学里面的某个知识点,但是这个知识点可能与物理有联系,也可能这个知识点与数学也有联系,想要学习和掌握这个知识点,他应该怎么做呢?有了知识图谱网络,就能帮他快速的提供一些有用的信息:
(1)告诉他先学习那几个知识点
(2)告诉他这个知识点有几种途径
(3)告诉他最快的掌握方式是什么
(4)如果掌握了,通过知识点与题目的关联,能给他出一些起到练习巩固的效果
(5)其他....
当然有了图谱数据之后,其实能从里面挖掘出很多其他的信息,当然需要跟具体的业务结合,才能产生的真正的价值。比如北京市的公交站地图或者地铁地图。
言归正传,做项目期间大致看了一遍neo4j官网的文档和它提供的查询语言cypher(英文为翻译的意思)
什么是Cypher?
cypher是neo4j官网的提供的声明式图谱查询语言,用来可视化查询展示图谱里面的节点和关系,围绕图谱查询提供了可读性好和容易使用,功能强大的众多优点。
按照官网的说法,cypher的产生,参考了动态编程语言的一些语法,如python,ruby,scala,有非常多的强大的函数库,我们也项目里也用了一些复杂的语法,确实非常强大,不过想要运用自如,确实得花一定时间测试使用才行。
下面介绍下neo4j的几个核心概念:
#### (1) Nodes(节点,类似地铁图里的一个地铁站)
图谱的基本单位主要是节点和关系,他们都可以包含属性,一个节点就是一行数据,一个关系也是一行数据,里面的属性就是数据库里面的row里面的字段。
除了属性之外,关系和节点还可以有零到多个标签,标签也可以认为是一个特殊分组方式。
#### (2) Relationships(关系,类似两个相邻地铁站之间路线)
关系的功能是组织和连接节点,一个关系连接2个节点,一个开始节点和一个结束节点。当所有的点被连接起来,就形成了一张图谱,通过关系可以组织节点形成任意的结构,比如list,tree,map,tuple,或者更复杂的结构。关系拥有方向进和出,代表一种指向。
#### (3) Properties(属性,类似地铁站的名字,位置,大小,进出口数量等)
属性非常类似数据库里面的字段,只有节点和关系可以拥有0到多个属性,属性类型基本和java的数据类型一致,分为 数值,字符串,布尔,以及其他的一些类型,字段名必须是字符串。
#### (4) Labels(标签,类似地铁站的属于哪个区)
标签通过形容一种角色或者给节点加上一种类型,一个节点可以有多个类型,通过类型区分一类节点,这样在查询时候可以更加方便和高效,除此之外标签在给属性建立索引或者约束时候也会用到。label名称必须是非空的unicode字符串,另外lables最大标记容量是int的最大值,近似21亿。
#### (5) Traversal(遍历,类似我们看地图找路径)
查询时候通常是遍历图谱然后找到路径,在遍历时通常会有一个开始节点,然后根据cpyher提供的查询语句,遍历相关路径上的节点和关系,从而得到最终的结果。
#### (6) Paths(路径,类似从一个地铁站到另一个地铁站的所有的到达路径)
路径是一个或多个节点通过关系连接起来的产物,例如得到图谱查询或者遍历的结果。
#### (7) Schema(模式,类似存储数据的结构)
neo4j是一个无模式或者less模式的图谱数据库,像mongodb,solr,lucene或者es一样,你可以使用它不需要定义任何schema,
Indexes(索引)
遍历图通过需要大量的随机读写,如果没有索引,则可能意味着每次都是全图扫描,这样效率非常低下,为了获得更好的性能,我们可以在字段属性上构建索引,这样任何查询操作都会使用索引,从而大幅度提升seek性能,
构建索引是一个异步请求,并不会立刻生效,会再后台创建直至成功后,才能最终生效。如果创建失败,可以重建索引,先删除索引,在创建即可,然后从log里面找出创建失败的原因然后分析。
Constraints(约束)
约束可以定义在某个字段上,限制字段值唯一,创建约束会自动创建索引。
至此对neo4j里面的核心概念已经介绍完毕,其实就是实际生活中的例子的抽象,如果还不能理解图数据库,就想一下每个城市的公交图或者地铁图,后面散仙会写一些具体用法的例子。
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
相关推荐
Neo4j是一款高性能的图形数据库,它支持C/S(客户端/服务器)结构和内嵌式部署两种方式。...随着Web 2.0和大数据时代的到来,图形数据库Neo4j在数据密集型应用中的地位将越来越重要,其研究和应用领域也将不断扩展。
Neo4j是目前最流行、功能最强大的图数据库之一,广泛应用于社交网络分析、推荐系统、知识图谱构建等领域。其特点是: 1. **高性能**:Neo4j采用内存映射技术,能快速处理大规模图数据。 2. **ACID事务**:支持原子...
Neo4j是一款强大的开源图形数据库,它以节点、边(关系)和属性的形式存储数据,非常适合处理复杂网络和关系型数据。在这个“neo4j图形数据库.rar”压缩包中,包含了一个名为“neo4j.docx”的文档,我们可以期待这份...
标题与描述概述的知识点主要集中在Neo4j图数据库的基础学习上,这是一份入门级的教程,旨在帮助初学者理解并掌握Neo4j的核心概念和基本操作。通过一系列的代码示例,文档深入浅出地介绍了如何在Neo4j中构建节点空间...
2. **数据模型**:解释Neo4j中的核心概念——节点(Nodes)、关系(Relationships)和属性(Properties)。节点代表实体,关系描述实体间的联系,而属性则为节点和关系添加额外信息。 3. **图形数据库的优势**:...
#### 图形数据库概念与Neo4j简介 **图形数据库**是一种非关系型数据库,它基于图论中的节点、边和属性来存储数据,而非传统的表格形式。这种模型非常适合处理具有复杂连接的数据集,如社交网络、推荐系统和知识图谱...
1. **简介与安装**:这部分会介绍Neo4j的基本概念,包括其设计理念和核心特性。还会详述如何在不同的操作系统上下载、安装和启动Neo4j服务器。 2. **Cypher查询语言**:Cypher是Neo4j的声明式图查询语言,类似于SQL...
Java操作Neo4j数据库是利用Java编程语言与Neo4j图数据库进行交互的过程。Neo4j是一种高性能的NoSQL图数据库,它以...以上就是使用Java操作Neo4j数据库的基本方法和核心概念,实践中可以根据具体需求进行扩展和优化。
**Neo4j** 是一种图形数据库,特别适合处理复杂的关系和网络数据。它使用图形模型来存储和查询数据,其中节点代表实体,边表示实体之间的关系。在本项目中,我们通过JDBC驱动将Excel数据转化为图形数据库中的节点和...
在架构上,Neo4j提供了一套完整的生态系统,包括了数据库核心、图形化界面(Bloom)、浏览器(Browser)、以及针对开发和管理的应用程序(Desktop)。此外,Neo4j通过Cypher查询语言为开发者提供了强大的工具来查询...
Neo4j是一款强大的图形数据库系统,它以图形数据模型为核心,提供高效的数据存储和查询功能。社区版是Neo4j的免费版本,适用于个人学习、开源项目和非商业用途。"neo4j-community-3.4.0-windows.zip"这个压缩包包含...
首先是Neo4j的核心概念。Neo4j是一款原生图形数据库,它专为快速的图数据管理、存储和遍历而设计。在Neo4j中,关系是第一类公民,它们代表实体间的预材料化连接。与关系型数据库中随着关系数量增多性能呈指数级下降...
综上所述,“Neo4j图数据库.rar”提供的内容涵盖了Neo4j的基本概念、核心组件、Cypher语言、知识图谱构建等多个方面,对于想要学习或提升Neo4j技能的用户来说,这是一个宝贵的资源集合。通过深入学习和实践,可以...
《Neo4j实战》这本书是针对图形数据库领域的专业指南,主要聚焦于Neo4j这一流行的开源图形数据库系统。本文将深入探讨该书所涵盖的重要知识点,帮助读者理解并掌握Neo4j的核心特性和应用场景。 首先,图形数据库是...
在Neo4j中,关系是核心元素之一,它们代表实体之间的预构建连接。 #### 二、图数据库概念 - **图数据库基础**:介绍了图数据库的基本概念,包括节点、关系以及属性等元素。 - **图模型**:详细解释了图模型中的...
- 图算法是图形数据库的核心优势之一,能够帮助用户从复杂的图数据中提取有价值的信息。 - Neo4j内置了一套强大的图算法库,支持路径查找、社区检测等多种算法。 - 详细讲解了如何使用这些算法解决实际问题。 - ...