V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zvvvvv
V2EX  ›  程序员

关于处理导入 excel 的数据一个问题

  •  
  •   zvvvvv · 2023-01-10 17:11:10 +08:00 · 1164 次点击
    这是一个创建于 677 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想知道大家平时都是怎么处理导入的 excel 数据的。 目前我知道的有两种方法: 1 、批量的进行读、校验、保存 2 、每行数据进行单独处理 因为目前在改公司的一个老项目时,发现他需要对 excel 某个字段的唯一性进行校验。此时是批量处理的话,由于在处理导入数据前期有对校验所需用的数据进行一次缓存,那么在处理导入数据的过程中,如果在客户端手动的添加了一条与 excel 冲突的数据,并不会影响 excel 中数据的保存(按理来说冲突的那条数据应该无法被保存)。然后如果时单独处理的话,那么会造成大量的数据库连接。

    9 条回复    2023-01-13 14:35:10 +08:00
    zvvvvv
        1
    zvvvvv  
    OP
       2023-01-10 17:12:53 +08:00
    我翻了一些国外的开源项目,发现他们对导入的数据都是逐行进行处理的,这样真的好吗
    qingwnag
        2
    qingwnag  
       2023-01-10 17:32:26 +08:00
    逐行处理,可能是因为需要做数据校验,校验失败后是直接失败返回还是校验完一把返回未通过数据。
    litchinn
        3
    litchinn  
       2023-01-10 17:54:14 +08:00
    可以试试导入时把要导入的数据缓存起来,手动新增的时候查一下,但是如果真是 0 容忍的话还得加锁或者数据库设置唯一约束
    zvvvvv
        4
    zvvvvv  
    OP
       2023-01-11 09:31:54 +08:00
    @qingwnag 现有项目就是逐行处理的,但是导入时进行了大量的关联数据缓存。看来还是只能通过加版本进行区分了
    zvvvvv
        5
    zvvvvv  
    OP
       2023-01-11 09:32:23 +08:00
    @litchinn 目前看来是只能这样了,唯一的缺点是插入的时候效率会降低
    RedBeanIce
        6
    RedBeanIce  
       2023-01-13 13:51:05 +08:00
    1 ,请注意一个异常情况,,,如果导入的 excel 行数过多,会导致 web 服务 OOM 内存溢出。
    2 ,导入本身应该被认为或者设计成是一个耗时操作,,所以效率请不要考虑太多。(可以提醒用户处理了多少行)
    zvvvvv
        7
    zvvvvv  
    OP
       2023-01-13 13:59:20 +08:00
    @RedBeanIce 好的 因为总是在想能不能有什么骚操作可以提升下效率,主要还是功能在设计之处就设计的有问题,各种数据耦合在一起了..
    RedBeanIce
        8
    RedBeanIce  
       2023-01-13 14:10:09 +08:00
    @zvvvvv
    假如一个 excel 文件一万行,,读取的时候,最好可以一千行(可配置)读取一次,处理一次。。
    否则一次性把一万行全部加载,web 服务基本上就 OOM 了,,,

    一千行一次读取,基本上已经提升很多效率了。。
    zvvvvv
        9
    zvvvvv  
    OP
       2023-01-13 14:35:10 +08:00
    @RedBeanIce 目前已经限定行数读取了,因此 OOM 暂时可以不考虑。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   920 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:47 · PVG 04:47 · LAX 12:47 · JFK 15:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.