锁定老帖子 主题:商品无限分类的算法如何优化?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-14
我碰巧也做过同样的东西。
树里共100-200节点; 第一次,用递归查询数据,就是每个节点一个SQL,>2分钟; 第二次,用一个SQL查出所有纪录,用java在内存里按数据关系整理出树形结构,<10秒。 (具体数字记得不是很清楚,仅供参考) |
|
返回顶楼 | |
发表时间:2008-03-14
在服务器启动时全部加载到一个全局变量里,要是后台对分类有所修改的话也随便改改这个变量。
|
|
返回顶楼 | |
发表时间:2008-03-14
tree的显示,一般的都是由用户的点击触发下级菜单的显示,没见过一次性load整棵tree的。。。
另外:因为是无限级的tree,所以一般不在id上体现tree关系(id再长也是有限级的),而是使用自关联(表中添加 id, parent_id 字段); 这时,如果是要判定某个node是否属于某个tree(常用于权限范围等的判定),db2/oracle/sqlserver都有相关的SQL扩展,可以一条sql做到。 postgresql/mysql(高版本)虽然没有直接支持,但是可以自己写个存储过程在数据库里面递归实现,效率也要比load出来再判定高很多。 |
|
返回顶楼 | |
发表时间:2008-03-14
Lucas Lee 写道 我碰巧也做过同样的东西。
树里共100-200节点; 第一次,用递归查询数据,就是每个节点一个SQL,>2分钟; 第二次,用一个SQL查出所有纪录,用java在内存里按数据关系整理出树形结构,<10秒。 (具体数字记得不是很清楚,仅供参考) 放在静态map中 |
|
返回顶楼 | |
发表时间:2008-03-14
表设计的问题,搞这么复杂。。。
现在的设计,统计够呛的。 |
|
返回顶楼 | |
发表时间:2008-03-14
晕,居然重复提交了。
多级分类的设计。。。 |
|
返回顶楼 | |
发表时间: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大小了 |
|
返回顶楼 | |
发表时间: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字段. 可以无限级分类. |
|
返回顶楼 | |
发表时间:2008-03-14
qianlei007 写道 关于这样的树加载, 都是一级一级加载。效率高点把。。。
一次递归,数据量大的话,基本要死掉。。 对,如果不要求大大小小一下全部摆出来, 就可以先显示最大的类 , 然后客户选择哪个大类再去取再动态加入, 这时候ajax最好用了. |
|
返回顶楼 | |
发表时间:2008-03-14
id
name parentid isLeaf(是否是叶子) 不用递归,点击节点时加载子节点 |
|
返回顶楼 | |