赞
踩
一、问题描述
分销社交电商系统产品需求:记录用户之间的推荐关系:A 推荐 B,B 推荐 C,直至 N,理论上无限级。同时由于数据展示的关系,需要快速查询出某一个人所有直接和间接推荐的用户。
以下图一张简单的三国人物图谱举例:
二、常见的解决方案
使用经典的结构,即每一条记录用一个字段记录推荐人编号-父节点,从而能够建立二维的关系表,然后依次递归所有记录找出推荐关系。
上述数据可以描述为如下图:
优点:设计直观,一目了然。代码实现起来简单,明了。
缺点:由于节点间的推荐关系是直接记录的,因此对表的任何增查改删(CRUD)的操作都是用多级的递归操作实现的,在层级增多时,导致不断访问数据库,随着循环次数增多,效率低下,执行时间开销呈几何指数增长。
改进:在数据量相对较小的情况下,可以借助于缓存机制来做优化,将整个完整树的信息放入内存进行处理,避免直接对数据库操作的性能开销。
而在设计系统时,预计容纳的用户数量大,且有多层的推荐关系的约束条件下,该方案的数据库操作的效率可能会低到无法忍受,且会拖慢整个系统,所以寻找一种查询效率高的方案成为首选。
三、前序遍历预排序遍历树算法解决方案
推荐关系可以用数据结构中的二叉树来解决,二叉树在数据结构和算法中有几种遍历方式:前序、中序、后序及层序。
一般数据库系统应用中,查询的需求总要大于删除和修改。为了避免对于树形结构查询时的递归
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。