用户关系表 存储_如何存储分销社交电商中用户间的推荐关系之一 [算法之美]...

本文介绍了如何在分销社交电商系统中存储和管理用户间的无限级推荐关系。通过前序遍历的左右值编码方法,避免了递归查询的效率问题,实现了高效的数据增查改删操作。该方案适用于大规模数据,能显著提升查询效率。
摘要由CSDN通过智能技术生成

一、问题描述

分销社交电商系统产品需求:记录用户之间的推荐关系:A 推荐 B,B 推荐 C,直至 N,理论上无限级。同时由于数据展示的关系,需要快速查询出某一个人所有直接和间接推荐的用户。

以下图一张简单的三国人物图谱举例:

bd6736bfc62389f2da4e33e5be2390b0.png

二、常见的解决方案

使用经典的结构,即每一条记录用一个字段记录推荐人编号-父节点,从而能够建立二维的关系表,然后依次递归所有记录找出推荐关系。

上述数据可以描述为如下图:

6dd5923cd8777bd668bd498a96764ff3.png

优点:设计直观,一目了然。代码实现起来简单,明了。

缺点:由于节点间的推荐关系是直接记录的,因此对表的任何增查改删(CRUD)的操作都是用多级的递归操作实现的,在层级增多时,导致不断访问数据库,随着循环次数增多,效率低下,执行时间开销呈几何指数增长。

改进:在数据量相对较小的情况下,可以借助于缓存机制来做优化,将整个完整树的信息放入内存进行处理,避免直接对数据库操作的性能开销。

而在设计系统时,预计容纳的用户数量大,且有多层的推荐关系的约束条件下,该方案的数据库操作的效率可能会低到无法忍受,且会拖慢整个系统,所以寻找一种查询效率高的方案成为首选。

三、前序遍历预排序遍历树算法解决方案

推荐关系可以用数据结构中的二叉树来解决,二叉树在数据结构和算法中有几种遍历方式:前序、中序、后序及层序。

一般数据库系统应用中,查询的需求总要大于删除和修改。为了避免对于树形结构查询时的递归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值