星空网 > 软件开发 > ASP.net

最佳算法实现对泛型集合的数据去重

我负责运维的机票差旅分析报告项目, 分析报告所需的数据(订单数据和基础维度数据)是从业务库抽取过来的。 其中,有一个用户账户数据的同步程序, 今天查看线上日志,发现同步程序出现了异常:

执行ExecuteSqlCommand方法捕获到System.Data.SqlClient.SqlException异常:违反了 PRIMARY KEY 约束“PK_BASEUSERACCOUNT”。不能在对象“dbo.BaseUserAccount”中插入重复键。重复键值为 (105487)。违反了 PRIMARY KEY 约束“PK_BASEUSERACCOUNT”。不能在对象“dbo.BaseUserAccount”中插入重复键。重复键值为 (105488)。语句已终止。语句已终止。,SQL:insert BaseUserAccount(AccountId,AccountName,LoginName,EntId,EntName,DeptId,DeptName,CreateTime)values(74188,'薛彦','薛彦',49261,'太极计算机股份有限公司-智慧城市SBU部门一',49265,'销售部','2016/1/19 16:11:23');insert BaseUserAccount(AccountId,AccountName,LoginName,EntId,EntName,DeptId,DeptName,CreateTime)values(74205,'徐琳','徐琳',49261,'太极计算机股份有限公司-智慧城市SBU部门一',49265,'销售部','2016/1/19 16:11

程序底层是用EF实现的,账户同步的逻辑是把数据从数据源读取过来放到一个List集合里,然后在本地系统持久化时,先清空表,再将List的数据转换后分批插入。 通过分析,是从数据源拿的数据里有重复的数据,导致这边插入时出现主键冲突。

最佳算法实现对泛型集合的数据去重

 

数据源系统的数据存储比较乱,我们改变不了。只能在我们这边做文章了。 于是,决定的改进方案是:根据AccountId对集合数据去重。

我跟开发小组的一个同学说了一下,并叮嘱,从数据源获取到的记录有6万多条,注意优化一下去重算法。如果按常规的去重,估计要耗时5分钟,期望优化后能控制在半分钟内。

第二天,这个小同学交活了。 6万条记录的List集合,算法耗时平均不超过15毫秒。 赞一个!

最佳算法实现对泛型集合的数据去重

他的实现方案是,利用List的Distinct方法,然后重写了实体类的Equals方法。如下上代码:

namespace EntOlap.ETL.EF{  public partial class BaseUserAccount // 由于是EF,这里新建一个partial类  {    public override bool Equals(object obj)    {      BaseUserAccount bua = obj as BaseUserAccount;      if (bua == null)      {        return false;      }      else      {        return this.AccountId == bua.AccountId;      }    }    public override int GetHashCode()    {      return AccountId.GetHashCode();    }  }}

最佳算法实现对泛型集合的数据去重

 




原标题:最佳算法实现对泛型集合的数据去重

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

搜索引擎营销:https://www.goluckyvip.com/tag/13195.html
退货换货:https://www.goluckyvip.com/tag/13197.html
非洲蓝海市场:https://www.goluckyvip.com/tag/13198.html
选品建议:https://www.goluckyvip.com/tag/13199.html
科创板:https://www.goluckyvip.com/tag/132.html
更好用:https://www.goluckyvip.com/tag/1320.html
深圳到西安自驾路线攻略 深圳到西安自驾最佳路线:https://www.vstour.cn/a/411228.html
松花蛋是哪里的特产松花蛋的产地:https://www.vstour.cn/a/411229.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流