`
KingwarLuo
  • 浏览: 12716 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

记一次excel导入时遇到的问题

    博客分类:
  • Java
 
阅读更多

导入excel功能,一接到任务感觉很简单。

用poi包解析excel文件,逐行读取文件,写入数据库就完事了。

但是事情远没想象的那么简单,记下这篇文章,给后者一些思路。

 

 

需求:

1、导入要验证导入文件模板是否符合要求、导入的是否excel文件。

2、导入要校验行数,最大需支持1万条数据导入。(这里是影响性能的点)

3、导入前验证每一行的数据格式,错误行数超过50行就不再继续验证,提示用户导入失败,一旦出现错误数据,全部导入失败。(验证包含数据库是否存在校验、RPC获取异步数据校验、数据格式校验等。)

4、验证通过,保存数据库的时候每条数据需要RPC获取必要信息。导入完成需要校验手机号重复的数据,删除重复数据。

5、留咨新建时,需要关联会员

 

计算:导入操作的频率、每次RPC调用时间、每次数据库插入耗时、每条数据校验耗时、总耗时控制在一次请求30内

 

分析以上需求,有几个设计点:

校验:

1、第2点,导入1万条数据很耗时,考虑分批导入,一次最多1000条。1万条有可能比较多,所以将1万条配置到配置中心,可以灵活调整。

2、需求第3点校验的时候,需要每个字段校验一遍。校验的数据先预存在内存,用Map保存,尽量减少RPC调用。(减少网络资源的使用)

3、需求第3点先校验完全部数据,构造好插入的全部数据,再统一进行数据库操作。

4、每条数据有个业务编号,需要借助redis生成,这里采用批量生成的方式,减少IO次数。

5、第5点操作,意味着每一条留咨,都要调用一次会员接口

如果在插入留咨前,调用会员注册接口,就是调用一万次RPC,假设调用一次RPC时间是10ms,一万条就是100s,这是一次操作不能接受的。

考虑到会员信息不是马上要用的字段,最好在导入完成后,启动异步线程调用会员创建接口,可以减少导入时等待时间。

5.1假设有两个线程同时处理,会出现多线程并发问题。

5.1.1 尽量减少两人同时导入的耦合度,以当前线程导入人姓名为查找维度

5.1.2 每次操作加分布式锁,保证同一条数据不会被多个线程处理,在处理时,预估每此操作100条数据需要的时长为5分钟,5分钟一到自动释放。

 

6、导入时,有可能导入重复数据,如果手机号重复,需要立马删除。这是补偿机制

6.1 删除  where mobile in(用手机号分组,找出手机号多于1条的数据) and id not in (用手机号分组,找出除最小id以外的数据)

 

技术点:

1、插入的时候需要保存创建人、修改人,对于多线程来说,每个线程的操作人都是不一样的,所以不能保存spring单例模式,要用prototype模式。

2、guava包Lists.partition来按1000条数据一次操作。

 

分享到:
评论

相关推荐

    BCB下的EXCEL导入数据库

    可以考虑先将Excel数据加载到内存的临时数据结构中,然后一次性批量导入数据库,以减少数据库操作次数。 以上就是"BCB下的EXCEL导入数据库"的主要技术点。在实际开发中,你需要根据项目需求和资源限制进行相应的...

    Excel表数据导入到SQL数据库中

    本知识点将深入讲解如何将Excel表数据导入到SQL数据库中,这在数据分析、报表生成、业务系统集成等场景下非常常见。 首先,我们需要理解Excel和SQL数据库之间的基本差异。Excel是微软公司开发的一款电子表格应用,...

    C# 写的Excel导入mysql数据库

    在读取Excel文件时,可以一次性读取较小的数据块,而不是一次性加载整个文件。 4. **MySQL数据库连接**: 首先需要安装MySQL的ADO.NET驱动,如MySql.Data.dll,然后通过`MySqlConnection`对象建立与MySQL服务器的...

    java web Excel导入数据库

    读取Excel数据时,我们通常会遇到数据类型转换的问题。例如,Excel中的单元格可以存储字符串、数字、日期等,我们需要根据业务需求将其转换为Java对象。对于日期,可能需要使用`SimpleDateFormat`进行格式匹配;对于...

    V8 Excel导入导出

    5. **批量操作**:通过Excel导入,用户可以一次性处理大量数据,如批量添加、更新或删除员工信息,批量调整工资、福利等。这对于处理大量人事变动非常有帮助。 6. **错误处理**:如果在导入过程中遇到错误,V8系统...

    excel导入数据到数据库的工具

    2. **批量导入**:支持一次性导入多个Excel工作表或者整个文件,大大提高了数据迁移的效率。 3. **映射配置**:允许用户自定义Excel列与数据库字段之间的映射关系,确保数据导入的准确性。 4. **预览和验证**:在...

    Excel导入到Mysql数据库源代码

    如果数据量大,可能还需要进行分批处理,以降低一次性导入的压力。 2. **建立连接**:使用编程语言如Python的`pymysql`或`mysql-connector-python`库,Java的`JDBC`,或者其他支持MySQL的接口,建立与MySQL服务器的...

    excel数据导入sql工具

    4. **数据批量导入**:工具一般支持批量导入功能,这意味着一次可以上传大量记录,而不是逐条输入。这对于处理大量数据尤其高效。然而,工具的局限性在于数据量的大小,对于非常大的数据集,可能需要分批导入或寻找...

    ssh整合poi导入导出Excel

    - 性能优化:大量数据导入时,可以考虑分批处理,避免一次性加载大量数据导致内存溢出。 - 安全性:确保上传的文件安全无病毒,防止恶意文件注入。 总之,SSH框架结合Apache POI,为Java开发者提供了一个强大且灵活...

    excel批量导入oracle数据库

    6. **错误处理与日志记录**:在批量导入过程中,可能会遇到数据不一致、格式错误等问题,因此需要设置错误处理机制,并记录导入日志,以便于问题排查和数据修复。 7. **性能优化**:为了提高导入效率,可以考虑以下...

    excel表导入到tp框架数据库

    综上所述,将Excel表导入到TP框架数据库涉及到了数据读取、预处理、数据映射、事务控制、性能优化等多个技术环节。通过掌握这些知识点,我们可以构建一个稳定且高效的Excel数据导入系统,有效地将Excel中的数据转化...

    将EXCEL内容导入SQL SERVER表中

    7. **错误处理与日志记录**:为了确保数据导入过程的稳定性和可追踪性,程序应该包含错误处理机制,当遇到问题时能够提供反馈,并记录详细日志。 在实际操作中,需要注意以下几点: - **数据一致性**:确保Excel中...

    Excel导入oracle工具

    - 大数据处理:对于非常大的数据量,可能需要分批导入,避免一次性导入导致内存溢出或数据库性能下降。 - 测试:在正式导入前,最好先在测试环境中进行尝试,确认无误后再进行生产环境的操作。 总的来说,Excel导入...

    Excel导入数据库工具

    4. 批量导入:为了提高效率,工具应该支持批量导入,一次处理多个Excel文件或大量数据行。 5. 安全性:在导入过程中,保护数据安全至关重要,工具应提供数据加密和权限控制功能。 6. 可定制性:高级用户可能需要...

    excel批量导入数据库

    这些方法可以一次性处理大量记录,比逐条插入效率高得多。 4. **jsp平台**:JSP(JavaServer Pages)是Java的一种Web开发技术,用于创建动态网页。在后台管理中,开发者可以编写JSP页面来实现用户界面,处理用户...

    批量导入excel

    2. **批量操作**:批量导入是指一次性处理多个Excel文件,而不是逐一操作。这在数据量大时能显著提高工作效率。例如,一个商城可能需要定期更新成千上万的商品信息,批量导入功能就能快速更新库存、价格等信息。 3....

    VB导入EXCEL至SQL

    良好的错误处理可以确保程序在遇到问题时不会崩溃,而是给出有用的反馈。 8. **数据类型转换**:由于Excel和SQL Server的数据类型可能不完全相同,VB需要进行相应的数据类型转换。例如,Excel中的文本可能是SQL ...

    C# excel文件导入sqlserver

    5. **错误处理**:在数据导入过程中,可能会遇到各种问题,如数据格式不匹配、数据库约束冲突等。因此,编写健壮的错误处理代码至关重要,确保出现问题时能够记录并适当地处理。 6. **关闭连接**:完成所有操作后,...

Global site tag (gtag.js) - Google Analytics