????隨著公司的業(yè)務量越來越大,已經(jīng)達到了上百G的數(shù)據(jù)量,算是一般互聯(lián)網(wǎng)公司的小型數(shù)據(jù)量了,但也可以稱為海量數(shù)據(jù)。
? ? 由于不同公司需要導出自己公司的業(yè)務數(shù)據(jù),那么一般的做法是適用程序來解決:
? ? 1):瀏覽器發(fā)起導出事件的網(wǎng)絡請求到服務器
? ? 2):服務器連接數(shù)據(jù)庫,從數(shù)據(jù)庫查詢數(shù)據(jù)
? ? 3):通過返回的數(shù)據(jù)進行寫入到excel/csv等文件
? ? 4):寫入完成之后,將文件二進制流響應給瀏覽器
? ? 以上流程是最常見的處理方式,而且一般下載結束之后,會保留在服務器,但是這種情況卻有其他問題,因為一般情況下,服務器是分布式的,那么保留在其中一臺服務器,那么其他服務器是沒有數(shù)據(jù)文件的,就會導致請求分配到其他機器的時候會重新從數(shù)據(jù)庫進行查詢。當時最容易解決的方案是采用nfs,將文件存儲到nfs節(jié)點上。
? ? 但是隨著數(shù)據(jù)量的越來越大,這種方案就會存在著大量超時的問題,或者存在著內(nèi)存溢出,以及數(shù)據(jù)庫服務器的cpu的飆高。
? ? 對于這種情況下最基礎的解決方案是:適用數(shù)據(jù)庫的內(nèi)置命令進行數(shù)據(jù)導出,程序發(fā)起導出操作采用異步方式處理,而且處理的效率上會比通過程序的方式處理高的多,而且不容易出錯;但是對于導出的請求越來越多的時候,效率也會越來越低。
????? ??