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

如何使用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-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使用节点、边和属性来存储数据,这种模型更适合处理具有关联性、层次结构或复杂网络的数据。 2. Cypher查询语言:Cypher是一种声明式、易于理解的语言,用于查询...

    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数据库兼容。 #### 六、节点和关系 - **节点**:代表实体对象,可以通过注解来定义其属性。 - **关系**:连接两个节点的边,...

    使用Django搭建的基于Neo4j知识图谱的人际关系搜索与六度关系搜索系统,使用Mongo存储语料输出,使用Neo4j维护知识图谱.zip

    使用Django搭建的基于Neo4j知识图谱的人际关系搜索与六度关系搜索系统,使用Mongo存储语料输出,使用Neo4j维护知识图谱.zip

    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官方中文文档-翻译

    **Neo4j官方中文文档-翻译** Neo4j是一款先进的图形数据库系统,专注于处理复杂的网络数据结构。作为NoSQL数据库的一员,它以...无论你是开发人员、数据科学家还是DBA,这份文档都是理解和使用Neo4j不可或缺的资源。

    neo4j-bloom-1.9.1.tgz

    Neo4j Bloom是Neo4j数据库的一个可视化工具,主要用于图形数据的探索、发现和理解。在1.9.1版本的发布中,它提供了一系列功能和优化,旨在帮助用户更有效地处理复杂的数据关系网络。这个名为"neo4j-bloom-1.9.1.tgz...

    neo4j官方使用手册3.1

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

    neo4j介绍.pptx

    Neo4j 是一个开源的 NoSQL 图数据库,应用图形理论存储实体之间的关系信息,以“图”这种数据结构做为逻辑结构存储和查询数据。Neo4j 具有高效存储和查询关联数据的优势,在需要表示多对多关系时,可以通过关系能够...

    Neo4j学习-Neo4j入门-Neo4j文档

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

    SpringBoot整合neo4j案例源码

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

    neo4j window 64 免安装

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

    Neo4j Developer Manual 3.0 Java

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

Global site tag (gtag.js) - Google Analytics