【java基础 5】树形结构数据加载的思考
来源:互联网 发布:类似金数据表单工具 编辑:程序博客网 时间:2024/06/02 05:54
前面两篇文章,分别介绍了使用递归和非递归算法加载树形结构数据的方式,本篇文章,则是自己闲下来的时候,进行的一点小思考。
一、什么地方会用到树形结构
刚开始一看到这种结构的时候,最先是想到了家谱。家谱就是一种树形结构,那是一种对我来说最为直观的一种理解。然后,在程序开发中,发现,树形结构的应用,更多的是出现在一些后台管理系统。而其具体应用,则是作为类似于windows文件夹的一个菜单导航作用。
而,最近在做的一个项目中,在加载某一产品的类别时,也用到了树形结构。比如说:
生活类
--------A
--------------a
--------B
办公类
--------A
--------B
但就其主要的应用场景,在我目前接触到的项目中,还是后台管理系统统居多。一般,作为后台的管理系统来说,对于性能的要求相对来说没有web端高。其次,一个比较合理的程序设计,一棵树的设计,不会超过太多的分支,比如说,生活类下面,不能超过10个。总体来说,整个菜单项,控制在50—100个左右,是比较多的。而一个类别的深度,也最多是在4-5度左右。个人感觉,如果超过了4-5度,这个程序的设计必须再靠机会考究。(PS:4-5度,已经是我个人的极限了)
二、加载树形结构的几种方式
1,使用递归一次性全部加载
2,使用循环一次性全部加载
3,按需加载(使用到那个,再加载哪个。有些目录,它可能是用不到的,加载出来干嘛。但是,这样的话,无疑又增加了数据库的IO操作)
分析:
前提:用户很少说一次会把每个节点目录的东西都点一遍,它只会挑选为数不多的几个菜单项进行操作。而根据遗传算法的基本思想(用户上次选择了哪些菜单项,她下次还有可能会选择哪些菜单项,靠,我感觉说是程序的局部性原理会更切合实际一点。勿喷,个人联想),或者说是CPU 如果说数据比较少的话,那么使用第二种方法,我认为还是比较合理的。但如果数据多的话,或许使用第三种才是更合适的。
附:科普程序的局部性原理(往简单了说,内存的高速缓存区据说就是根据这个原理来的)
空间局部性;
如果一个用户在本次访问了2号区域数据,比如说上图的生活类 A,那么挨着这个2号区域的周边数据,很有可能会被这个用户下次访问。
时间局部性:
如果一个程序,这次执行了指令,比如说执行了查询用户的select语句,那么,这条语句,很有可能在不久后,再次被使用执行。
三、个人总结
其实,我个人感觉,在程序开发中,局部性原理还是存在的。比如说一些大型的网站利用爬虫爬到的数据,分析一个用户的消费偏好等,这不就是这个用户总是买生活用品,他下次还有可能买生活用品的东东嘛。所以,或许可以做缓存,或者说,静态树形结构(对于一些比较稳定的,我感觉是绝对可以的,而对于一些有先后关系的数据,那么之前的几种,也可以考虑做一下缓存)
还有,在实际的应用中,我们通常会将整个树形结构的节点数据保存起来,但通常,用户真正要获得的数据,只是在最后一层,才是相对来说真正有意义的。那么,或许我们可以直接将大体上的菜单项写进缓存,或者写进程序(因为它没有实际意义,通常很稳定)比如说:
用户管理
----------A
---------------a
----------B
报表控制
---------A报表
---------B报表
- 【java基础 5】树形结构数据加载的思考
- 【java基础 3】树形结构数据呈现的递归算法实现
- 【java基础 4】树形结构数据呈现的非递归算法(循环)实现
- java拼接树形结构数据
- 存储树形结构的一些思考
- 树形结构数据的提交
- java 生成 树形结构数据(tree)
- 加载树形结构
- 树形结构数据的数据表设计
- oracle 中 树形结构数据的实现
- 数据库存储树形结构的数据
- 数据库存储树形结构的数据
- oracle查询树形结构数据的语句
- 数据库存储树形结构的数据
- JavaScript之树形结构的数据(一)
- mysql存储树形结构的数据
- java类加载的思考
- java实现文件夹的遍历(树形结构)
- MySQL存储引擎--MyISAM与InnoDB区别
- C语言和汇编混合编程
- java调用arcgis soe发布的rest服务,中文传值乱码问题
- 盛世中的蝼蚁
- Python生成器
- 【java基础 5】树形结构数据加载的思考
- RMQ算法
- 数据结构进阶(四)二叉排序树(二叉查找树)
- leetcode9_Palindrome Number
- 面试题:HashMap HashTable ConcurrentHashMap区别
- PAT(B) 101-139-2-2016-09-11 考试总结
- Maven入门
- java性能优化笔记(三)java程序优化
- 小太阳的滚动