论坛首页 Java企业应用论坛

一个关于加载树的需求,大家讨论一下如何实现

浏览 10819 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-09-09   最后修改:2011-09-10
声明:
1、本贴纯属技术讨论,无意者请绕道
2、这是我们目前项目中的一个实际需求,已用某种方法实现,此贴的存在只是技术讨论,开开眼界,所以,投“新手”者请绕道
3、本来想将我们目前的实现方式贴出来,设置为回贴可见,但是本人愚钝,未找到此功能


需求:
数据库中有一张表,实际有用的字段只有name和parent,该表在系统首次运行时为空,之后的数据完全由用户操作产生。

该表的数据在界面上体现为一颗树,系统首次运行时该树中无任何节点,用户可以随意增加、删除、移动该树上的节点,每一个节点对应数据表中的一条记录。

问题:
当系统运行一段时间之后,该表中的记录会很多,问如何设计表结构、使用怎样的加载方式可以更快的将表中的原始数据体现到界面的树中?要求一次性加载完!

补充:
第三页中有我们系统中目前采用的方案,欢迎大家提出意见!
   发表时间:2011-09-09   最后修改:2011-09-09
树的总大小
增删改的频率,效率需求
是否需要全子遍历,效率需求
是否需要模糊中间级别查找  比如 总公司,北京分公司 ,所有部门,的网络部
0 请登录后投票
   发表时间:2011-09-09   最后修改:2011-09-09
抛出异常的爱 写道
树的总大小
增删改的频率,效率需求
是否需要全子遍历,效率需求
是否需要模糊中间级别查找  比如 总公司,北京分公司 ,所有部门,的网络部


1、树的总大小

这不是问问题,所以这个不用关心,能快则快

2、移动节点的机会很少,增、删的比较多

3、必要的时候需要遍历,不过这个在前台实现,无需与数据库交互,不必考虑

4、需要模糊查找,完全由前台实现,无需与数据库交互,不必考虑

此贴主要讨论加载
0 请登录后投票
   发表时间:2011-09-09  
大概思路,首先只加载第一级的节点内容,然后用户点开哪个级别节点查询哪个节点的内容,然后为了避免重复查询可以将查过的内容缓存起来,1点想法,要是不好别笑哈
0 请登录后投票
   发表时间:2011-09-09  
要求一次性加载完
0 请登录后投票
   发表时间:2011-09-09  
呵呵楼主回的真够快的我在想想、
0 请登录后投票
   发表时间:2011-09-09  
该表首次为空?这句话是否可以理解成就算表里有数据了,重启服务器后表内数据会被清空?如果是这样的的话,每次用户增删改节点的时候除了更新数据库可以弄个缓存,更新缓存、这样的话读缓存的速度肯定要比查数据库快多了。要是还不行的话我想只有加索引了把。。
0 请登录后投票
   发表时间:2011-09-09  
既然那样,内存数据库就够了,何必大费周折..............
0 请登录后投票
   发表时间:2011-09-09   最后修改:2011-09-09
很多人设计树形数据的表结构的时候喜欢用parentid 这种模式来设计表结构。
例如: 
   id     value          parentid
    1      总部              0
    2    深圳分公司          1
    3    广州分公司          1
    4    南山办事处          2
    5    海珠办事处          3

这种设计有对查询组成成树对象造成不方便, 而且不直观。 特别对查询一个节点下所有的子节点就非常的不方便。
通常我的树形一般设计成这样:
   id       value
   "1"      总部
   "1.1"    深圳分公司
   "1.2"    广州分公司
   "1.1.1"  南山办事处
   "1.2.1"  海珠办事处
根据id的值就可以看出其所在树的位子。 查询子节点也相当方便。
如何把查询的结果组装成树对象就不需要我说了吧。
0 请登录后投票
   发表时间:2011-09-09  
kjj 写道
既然那样,内存数据库就够了,何必大费周折..............

既然用内存了,何必用内存数据库?
搞个树的对象,系统加载时或者系统reload时,把所有数据都加到这个树里,然后每次这个树有修改,都同步到数据库。
既然要求一次性加载完成,相比也不是很大,数据量就是1万也可接受
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics