论坛首页 Java企业应用论坛

商品无限分类的算法如何优化?

浏览 18055 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-03-14  
我碰巧也做过同样的东西。
树里共100-200节点;
第一次,用递归查询数据,就是每个节点一个SQL,>2分钟;
第二次,用一个SQL查出所有纪录,用java在内存里按数据关系整理出树形结构,<10秒。
(具体数字记得不是很清楚,仅供参考)
0 请登录后投票
   发表时间:2008-03-14  
在服务器启动时全部加载到一个全局变量里,要是后台对分类有所修改的话也随便改改这个变量。
0 请登录后投票
   发表时间:2008-03-14  
tree的显示,一般的都是由用户的点击触发下级菜单的显示,没见过一次性load整棵tree的。。。

另外:因为是无限级的tree,所以一般不在id上体现tree关系(id再长也是有限级的),而是使用自关联(表中添加 id, parent_id 字段);
这时,如果是要判定某个node是否属于某个tree(常用于权限范围等的判定),db2/oracle/sqlserver都有相关的SQL扩展,可以一条sql做到。
postgresql/mysql(高版本)虽然没有直接支持,但是可以自己写个存储过程在数据库里面递归实现,效率也要比load出来再判定高很多。
0 请登录后投票
   发表时间:2008-03-14  
Lucas Lee 写道
我碰巧也做过同样的东西。
树里共100-200节点;
第一次,用递归查询数据,就是每个节点一个SQL,>2分钟;
第二次,用一个SQL查出所有纪录,用java在内存里按数据关系整理出树形结构,<10秒。
(具体数字记得不是很清楚,仅供参考)

放在静态map中
0 请登录后投票
   发表时间:2008-03-14  
表设计的问题,搞这么复杂。。。
现在的设计,统计够呛的。
0 请登录后投票
   发表时间:2008-03-14  
晕,居然重复提交了。
多级分类的设计。。。
0 请登录后投票
   发表时间:2008-03-14  
表结构为:
int id   //id
int parentid  //父菜单的id  顶级为null  或者0
int level  //级别
char name//名字

开始 找出max level

1st,找出level为0的,就是顶级的

2,找出level为1的,根据parentid组装到树上去

3,找出level为2的。。。。。

4。找出level为3的 。。。。

5。找出level为4的 。。。。

6。找出level为5的 。。。。

7。找出level为6的 。。。。

继续 因为忘记判断level大小了
0 请登录后投票
   发表时间:2008-03-14  
我们项目的做法是利用XML.
如下:
<RECORD>
	<id>10010</id>
	<parent>0</parent>
	<name>试剂</name>
	<pos>1</pos>
	<level>1</level>
</RECORD>

level为等级.1是父级. id是有规则的一组int数字.比如 100 ,100100 ,100102
针对XML写一个实体Bean,在容器启动的时候加载到内存中..不需要数据库处理.在要的产品类别当中就一个type字段.
可以无限级分类.
0 请登录后投票
   发表时间:2008-03-14  
qianlei007 写道
关于这样的树加载, 都是一级一级加载。效率高点把。。。
    一次递归,数据量大的话,基本要死掉。。


对,如果不要求大大小小一下全部摆出来, 就可以先显示最大的类 , 然后客户选择哪个大类再去取再动态加入,
这时候ajax最好用了.
0 请登录后投票
   发表时间:2008-03-14  
id
name
parentid
isLeaf(是否是叶子)
不用递归,点击节点时加载子节点
0 请登录后投票
论坛首页 Java企业应用版

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