IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 记录一次导入功能去重的问题 -> 正文阅读

[大数据]记录一次导入功能去重的问题

在做张贴码导入功能的时候,遇到了一个去重的问题。

后端思想是:
1 读取excel,把每一行数据看成一个实体
2 开始每一行每个实体的校验
3 校验成功后放入集合
4 批量插入数据库

正常想法是在每个实体校验的时候去数据库查询是否存在相同的张贴码,存在则抛出异常,不存在放入集合,批量插入。

但是如果excel中有相同的张贴码相同就校验失败,也能导入了。因为每一行是跟数据库对比是否存在。

解决是在放入集合前,跟集合中每一项在对比一次,不存在了放入集合。或许有人会觉得直接在批量插入数据库前把集合去重了更快。但是目前需求需要让用户知道是哪行报错,不能替用户做决定。所以只能这样。

之后跟项目经理沟通了,需要三个属性确定唯一张贴码,开始开发。

// 1.对excel张贴码属性进行校验
    PassCode passCode = getPassCode(rowData, lineNum, user);
    // 2.校验成功后 根据三个属性进行判断 跟集合里的张贴码判断
    boolean present = passCodeList.stream().filter(p -> {
        if (p.getPassName().equals(passCode.getPassName()) && p.getDetailAddress().equals(passCode.getDetailAddress())
                && p.getPosition().equals(passCode.getPosition())){
            return true;
        } else {
            return false;
        }
    }).findAny().isPresent();
    // 3.
    if (present){
        throw new EhcException("第" + (lineNum + 1) + "行" + "张贴码在导入表中已存在, " + "不能重复导入," +
                "请认真检查导入表");
    } else {
       ... 加入集合
        passCodeList.add(passCode);
    }

其实这样也不是最好的选择,比如excel有1001条数据,第1001条与1000中任意一条相通的话,第一次进行1000次循环,放入数组,第10001条的时候通过校验放入集合前又要循环1000次。

但是目前也没有想到更好的方式了。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:53:24  更:2021-09-11 18:55:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:55:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码