`
qindongliang1922
  • 浏览: 2171502 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117084
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125431
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59506
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71021
社区版块
存档分类
最新评论

如何使用neo4j存储树形无限级菜单

阅读更多



对于树形菜单,想必大家都不陌生,这种业务数据,由于量小,关系复杂,所以在关系型数据库中,存储的格式一般都如下所是:
id,name,pid
01,bigdata,00
002,hadoop,01
003,spark,01
02,search,01
03,lucene,02
04,es,02


有没有人感到困惑,为啥不使用,主外键表,存储这种数据,而非得只使用一张表来存储呢?结果导致查询非常受限,通常只能递归出所有节点,然后对比找到指定数据。

如果使用主外键表存储,通常关系越复杂需要的外键表越多,假如你有8层关系,意味着你需要join到8个外键表,才能获取一条完整数据,这样一比,大多数时候,还是将这种数据,存储在一个表中,然后通过父字段进行找到上一级,当然这种场景下,通常数据量都不会太大,因为递归时间和数据量成正比。

那么当数据量超级大时,应该怎么设计才能支持各种各样的查询,也能提供良好的性能呢?

这个时候用关系型数据库存储肯定不行,超过几十万的数据,递归都需要十几或者几十秒的遍历时间,这样的性能是远远不达标的。

而图形数据库的出现,则是解决这个问题的神器,图形数据库就是为了存储超级复杂的依赖关系和提供高效的查询性能而应劫而生的,比如社交网络,知识图谱,地图最优路径等等。

当然树形菜单的数据,也可以存储在neo4j里面,从而提供强大的查询分析功能,neo4j的小数据下的例子与xmind的思维导图非常类似,都有着一图胜万语强大表现能力。



比如存储从小学到高中的课程里面的章节关系和知识点,如果我们用关系型数据库存储,
提供的分析查询能力非常有限,只能查某个确定节点的父节点,如果想找具体的任意一个节点需要递归遍历所有数据,或者想查某一个科目下,包含知识点路径最长的是哪个,等等就比较复杂了。

图形数据库里面描述数据,是通过节点和关系来描述的,关系必须有开始节点和结束节点
,节点和关系都可以有属性。



下面说下将树形菜单,存储到neo4j的思路:

(1)递归的每行数据是一个节点,首先插入所有的节点

(2)找到每个节点的父节点做为start节点,本身作为end节点,建立起关系


上面的两个步骤既可以分开执行,也可以单独执行,具体可以参考使用neo4j的api。

导入完的几个效果图如下,(注意这里限制深度了,不限制这个图密度可能非常大)






有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。





  • 大小: 122.9 KB
  • 大小: 170.2 KB
0
1
分享到:
评论
1 楼 a1439226817 2017-08-10  
有没有demo了,介绍了这么多 还是不知道怎么用和优势

相关推荐

    vue-neo4j:vue使用D3对neo4j进行可视化源码开发技术-其它

    Neo4j Vue 安装步骤 克隆或下载该库到本地 下载neo4j并安装到本地,启动neo4j服务 进入到该工程的根目录,输入命令:npm run update进行npm包的导入 使用命令:npm run dev启动该工程 默认端口是:8081 neo4j账号...

    Neo4j的详细使用教程

    Neo4j是一款高性能的图形数据库,它将数据存储为图结构,其中的数据实体(节点)通过关系相互连接。Neo4j使用Cypher查询语言进行数据操作,支持节点的创建、查询、更新和删除等功能,并且提供了数据导入、事务管理、...

    neo4j社区版 neo4j社区版neo4j社区版

    1. 图形数据模型:不同于传统的关系型数据库,Neo4j使用节点、边和属性来存储数据,这种模型更适合处理具有关联性、层次结构或复杂网络的数据。 2. Cypher查询语言:Cypher是一种声明式、易于理解的语言,用于查询...

    neo4j-timetree, 在 Neo4j 中,用于处理表示树的时间的Java和 REST api.zip

    neo4j-timetree, 在 Neo4j 中,用于处理表示树的时间的Java和 REST api GraphAware Neo4j TimeTree | 下载| Javadoc | 最新版本: 3.3.2.51. 27GraphAware TimeTree是一个简单的库,用于将 Neo4j 中的时间表示为时间...

    Neo4j中文使用手册

    ### Neo4j中文使用手册知识点总结 #### 一、Neo4j概述 **1. Neo4j亮点** - **完整的ACID支持**:确保在事务内的所有操作都能原子性地执行,保持数据的一致性和完整性。 - **高可用性**:能够支持分布式部署,即使...

    Linux的neo4j安装包

    1. **了解Neo4j**: Neo4j是一款NoSQL数据库,它以图形模型存储数据,其中节点代表实体,边代表实体之间的关系。这种数据结构使得查询复杂关系变得高效。 2. **下载安装包**: "neo4j-community-3.5.35"是Neo4j社区版...

    Neo4j Ogm Manual 2.0

    - **依赖管理**:通过Maven等工具管理项目依赖,确保项目中使用的Neo4j OGM版本与Neo4j数据库兼容。 #### 六、节点和关系 - **节点**:代表实体对象,可以通过注解来定义其属性。 - **关系**:连接两个节点的边,...

    Neo4j中文手册.zip

    4. 在Java应用中使用Neo4j 5. Neo4j远程客户端库 6. 遍历查询框架 7. 数据模型范例 8. 多语言支持 9. 在Python应用中使用Neo4j 10. 扩展Neo4j服务器 III. 参考 11. 性能 12. 事务管理 13. 数据...

    使用Neo4j中的数据在浏览器中图形化可视化

    neovis.js 由vis.js支持的图形可视化以及来自Neo4j的数据。 产品特点 连接到Neo4j实例以获取实时数据 用户指定的标签和要显示的属性 ...为了便于使用,可以从Neo4jLabs CDN获得Neovis.js: 最新发行 <script src="h

    neo4j官方使用手册3.1

    Neo4j是一款强大的图形数据库系统,它以图数据模型为核心,提供高效的数据存储和查询能力。在3.1版本中,官方手册详细介绍了如何安装、配置、管理和优化 Neo4j,以及如何使用Cypher查询语言进行数据操作。以下是基于...

    Neo4j学习-Neo4j入门-Neo4j文档

    Neo4j是一款强大的图形数据库系统,它以节点、关系和属性的形式存储数据,适用于处理复杂的网络结构和关联数据。在“Neo4j学习-Neo4j入门-Neo4j文档”这个主题中,我们将深入探讨Neo4j的基本概念、安装与配置、查询...

    SpringBoot整合neo4j案例源码

    下载并启动 Neo4j 社区版或企业版,配置相应的端口(默认7474)和数据存储目录。 在SpringBoot项目中,通过以下步骤配置Neo4j: 1. 添加依赖:在`pom.xml`中引入Spring Data Neo4j的依赖: ```xml <groupId>...

    neo4j-community-3.5.5

    使用Neo4j构建知识图谱,可以轻松地进行关联数据的查询和分析,有助于提升智能推荐、问答系统和数据挖掘的效率。 在压缩包子文件“neo4j-community-3.5.5”中,我们可以期待找到以下组件和文件: 1. **安装程序**...

    neo4j-bloom-1.3.1.zip

    我要在自己开发的基于python的推荐系统里,进行前端展示Neo4j图库中的关系图效果,在网上看教程有Py2neo与echarts,或者与D3结合使用,学习成本较大,所以想看看能不能直接将Neo4j本身的关系图效果展示出来,然后...

    neo4j window 64 免安装

    1. 图形数据库:与传统的关系型数据库不同,Neo4j使用节点、关系和属性来存储数据,更适合处理具有复杂关联的数据,如社交网络、推荐系统和知识图谱。 2. Cypher查询语言:Neo4j使用Cypher进行数据查询和操作,它是...

    Neo4j Developer Manual 3.0 Java

    通过以上概述可以看出,《Neo4j Developer Manual 3.0 Java》为开发者提供了全面深入的学习资源,不仅涵盖了Neo4j的基础知识和技术要点,还详细介绍了如何使用Cypher语言以及Neo4j提供的其他工具和服务来开发高效的...

    vue+neo4j +纯前端(neovis.js / neo4j-driver) 实现 知识图谱的集成 大干货

    vue+neo4j+(neovis.js / neo4j-driver)纯前端实现知识图谱的集成 一、Neovis.js 不用获取数据直接连接数据库绘图 二、 neo4j-driver 能够直接通过前端获取数据。 三、vis.js 绘图 四、 echarts绘图 neo4j是什么? ...

    Neo4j中文使用手册以及例子

    **Neo4j中文使用手册及例子** Neo4j是一款强大的图形数据库系统,它以其高效、灵活和直观的数据模型——图数据模型,深受开发者喜爱。在处理复杂的关系数据时,如社交网络、推荐系统、知识图谱等场景,Neo4j表现...

Global site tag (gtag.js) - Google Analytics