excel数据数据过多,上传到服务器的数据库中会造成服务假死,如果让你解决你有什么好的解决方案呢

如果有一个excel里面有5万多的数据,上传到服务器的数据库中会造成服务假死,如果让你解决你有什么好的解决方案呢

你是用将所有数据放在一个集合里往数据库保存的吗?

你这是excel存数据库?还是5w数据存数据库?

分批进行入库操作。

思路:

1.上传excel是对excel进行拆分。把一个大的excel拆成一堆小的excel。

然后处理拆分后的excel。这是一种方案,但这种方案治标不治本。

2.另一种方案就是把数据加载到缓存里(redis之类的),慢慢处理。

有很多种解决办法的。

1.硬件升级,即服务器升级

2.软件

    软件又分很多种了。

     通过写代码穿插事务进来,COMMIT同步提交提高性能,如果性能不好(5W小意思了,这是针对千万级的),如果没有很高的实时性数据要求,可以做定时任务安排到晚上。

     通过数据库sql优化方面,一般插入语句是这样的

     INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
      VALUES ('0', 'userid_0', 'content_0', 0);
     INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
      VALUES ('1', 'userid_1', 'content_1', 1);

     改成:INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) 
    VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);

     在数据方面,建立主键,并让插入的主键数据有序可以提高性能

以上软件优化任选一种对于5W条来说都可以解决你的问题,都实现,可以达到2秒不到。

注意事项:1.SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M,测试时修改为8M

                  2.事务要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,这时,效率会有所下降。所以比较好的做法是,在数据达到这个这个值前进行事务提交。