随着公司的业务量越来越大,已经达到了上百G的数据量,算是一般互联网公司的小型数据量了,但也可以称为海量数据。
由于不同公司需要导出自己公司的业务数据,那么一般的做法是适用程序来解决:
1):浏览器发起导出事件的网络请求到服务器
2):服务器连接数据库,从数据库查询数据
3):通过返回的数据进行写入到excel/csv等文件
4):写入完成之后,将文件二进制流响应给浏览器
以上流程是最常见的处理方式,而且一般下载结束之后,会保留在服务器,但是这种情况却有其他问题,因为一般情况下,服务器是分布式的,那么保留在其中一台服务器,那么其他服务器是没有数据文件的,就会导致请求分配到其他机器的时候会重新从数据库进行查询。当时最容易解决的方案是采用nfs,将文件存储到nfs节点上。
但是随着数据量的越来越大,这种方案就会存在着大量超时的问题,或者存在着内存溢出,以及数据库服务器的cpu的飙高。
对于这种情况下最基础的解决方案是:适用数据库的内置命令进行数据导出,程序发起导出操作采用异步方式处理,而且处理的效率上会比通过程序的方式处理高的多,而且不容易出错;但是对于导出的请求越来越多的时候,效率也会越来越低。