摘要:場(chǎng)景和痛點(diǎn)說(shuō)明今天因?yàn)橐粋€(gè)老同學(xué)找我,說(shuō)自己公司的物流業(yè)務(wù)都是現(xiàn)在用處理,按月因?yàn)閿?shù)據(jù)量大,一個(gè)差不多有百萬(wàn)數(shù)據(jù),文件有接近,打開和搜索就相當(dāng)?shù)穆?lián)想到場(chǎng)景要導(dǎo)入數(shù)據(jù),可能數(shù)據(jù)量很大,這里利用常用的一些方法比如會(huì)常有時(shí)間和內(nèi)存限制問(wèn)題下面我
場(chǎng)景和痛點(diǎn) 說(shuō)明
今天因?yàn)橐粋€(gè)老同學(xué)找我,說(shuō)自己公司的物流業(yè)務(wù)都是現(xiàn)在用excel處理,按月因?yàn)閿?shù)據(jù)量大,一個(gè)excel差不多有百萬(wàn)數(shù)據(jù),文件有接近100M,打開和搜索就相當(dāng)?shù)穆?p>聯(lián)想到場(chǎng)景:要導(dǎo)入數(shù)據(jù),可能excel數(shù)據(jù)量很大,這里利用常用的一些方法比如phpexcel會(huì)常有時(shí)間和內(nèi)存限制問(wèn)題編寫過(guò)程 說(shuō)明下面我們就利用一個(gè)利用流處理的類庫(kù)SpreadsheetReader來(lái)做大excel的讀取
關(guān)鍵具體在代碼里注釋代碼
Sheets(); if (!$sheets) { die("沒(méi)有工作表"); } //改變當(dāng)前處理的工作表 $Reader->ChangeSheet(0); //打印當(dāng)前所在工作表的當(dāng)前所在行數(shù)據(jù) var_dump($Reader->current()); //因?yàn)閞eader類集成了Iter所以可以用迭代方式處理 //這里提醒 如果文件超大,這邊的處理速度會(huì)過(guò)慢,不過(guò)不會(huì)引發(fā)內(nèi)存性能問(wèn)題 //$i = 0; //foreach ($Reader as $Row) //{ // if ($i>=3) { // break; // } // // echo $i . PHP_EOL; // print_r($Row); // // $i++; //} $endTime = microtime(true); $memoryUse = memory_get_usage(); echo "內(nèi)存占用:" . convert($memoryUse) . "; 用時(shí):" . ($endTime - $startTime) . PHP_EOL;結(jié)果 測(cè)試說(shuō)明
上面讀取的example1.xlsx文件有100M左右,讀寫過(guò)慢,測(cè)試只開了讀取當(dāng)前默認(rèn)工作表的當(dāng)前所在行數(shù)據(jù)日志記錄內(nèi)存使用率
因數(shù)據(jù)敏感,已做屏蔽
147.77 kb array (size=50) 0 => string "xxxxxxxxxxxxxx" (length=25) 1 => string "xxxxxxxxxxxxxx" (length=15) 2 => string "xxxxxxxxxxxxxx" (length=18) 3 => string "xxxxxxxxxxxxxx" (length=12) 4 => string "xxxxxxxxxxxxxx" (length=12) 5 => string "xxxxxxxxxxxxxx" (length=12) 6 => string "xxxxxxxxxxxxxx" (length=24) 7 => string "xxxxxxxxxxxxxx" (length=12) 8 => string "xxxxxxxxxxxxxx" (length=27) 9 => string "xxxxxxxxxxxxxx" (length=12) 10 => string "xxxxxxxxxxxxxx" (length=15) 11 => string "xxxxxxxxxxxxxx" (length=28) 12 => string "xxxxxxxxxxxxxx" (length=9) 13 => string "xxxxxxxxxxxxxx" (length=12) 14 => string "xxxxxxxxxxxxxx" (length=9) 15 => string "xxxxxxxxxxxxxx" (length=6) 16 => string "xxxxxxxxxxxxxx" (length=9) 17 => string "xxxxxxxxxxxxxx" (length=3) 18 => string "xxxxxxxxxxxxxx" (length=6) 19 => string "xxxxxxxxxxxxxx" (length=3) 20 => string "xxxxxxxxxxxxxx" (length=15) 21 => string "xxxxxxxxxxxxxx" (length=15) 22 => string "xxxxxxxxxxxxxx" (length=19) 23 => string "xxxxxxxxxxxxxx" (length=13) 24 => string "xxxxxxxxxxxxxx" (length=19) 25 => string "xxxxxxxxxxxxxx" (length=12) 26 => string "xxxxxxxxxxxxxx" (length=12) 27 => string "xxxxxxxxxxxxxx" (length=12) 28 => string "xxxxxxxxxxxxxx" (length=6) 29 => string "xxxxxxxxxxxxxx" (length=12) 30 => string "xxxxxxxxxxxxxx" (length=6) 31 => string "xxxxxxxxxxxxxx" (length=15) 32 => string "xxxxxxxxxxxxxx" (length=24) 33 => string "xxxxxxxxxxxxxx" (length=18) 34 => string "xxxxxxxxxxxxxx" (length=18) 35 => string "xxxxxxxxxxxxxx" (length=24) 36 => string "xxxxxxxxxxxxxx" (length=12) 37 => string "xxxxxxxxxxxxxx" (length=18) 38 => string "xxxxxxxxxxxxxx" (length=21) 39 => string "xxxxxxxxxxxxxx" (length=9) 40 => string "xxxxxxxxxxxxxx" (length=9) 41 => string "xxxxxxxxxxxxxx" (length=18) 42 => string "xxxxxxxxxxxxxx" (length=21) 43 => string "xxxxxxxxxxxxxx" (length=15) 44 => string "xxxxxxxxxxxxxx" (length=12) 45 => string "xxxxxxxxxxxxxx" (length=6) 46 => string "xxxxxxxxxxxxxx" (length=12) 47 => string "xxxxxxxxxxxxxx" (length=22) 48 => string "xxxxxxxxxxxxxx" (length=22) 49 => string "" (length=0) 內(nèi)存占用:207.55 kb; 用時(shí):9.5835480690002
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/29029.html
摘要:場(chǎng)景和痛點(diǎn)說(shuō)明我們工作場(chǎng)景都常會(huì)導(dǎo)出相關(guān)的數(shù)據(jù),有時(shí)候需要大量的數(shù)據(jù),,都有可能我們現(xiàn)有方案都是直接利用等類庫(kù)來(lái)操作,的加載或是寫入一次導(dǎo)出會(huì)遇到超時(shí)內(nèi)存和時(shí)間限制問(wèn)題,就算我們依舊不是最好的方案下面我們利用輸出,把數(shù)據(jù)依次輸出清空再輸出的 場(chǎng)景和痛點(diǎn) 說(shuō)明 我們工作場(chǎng)景都常會(huì)導(dǎo)出相關(guān)的excel數(shù)據(jù),有時(shí)候需要大量的數(shù)據(jù),10W,100W都有可能我們現(xiàn)有方案都是直接利用phpexce...
摘要:而常用的包需要把所有數(shù)據(jù)拿到后才能生成,在面對(duì)生成超大數(shù)據(jù)量的文件時(shí)這顯然是會(huì)造成內(nèi)存溢出的,所以考慮使用讓邊寫入輸出流邊讓瀏覽器下載的形式來(lái)完成需求。 最近接到一個(gè)需求,通過(guò)選擇的時(shí)間段導(dǎo)出對(duì)應(yīng)的用戶訪問(wèn)日志到excel中, 由于用戶量較大,經(jīng)常會(huì)有導(dǎo)出50萬(wàn)加數(shù)據(jù)的情況。而常用的PHPexcel包需要把所有數(shù)據(jù)拿到后才能生成excel, 在面對(duì)生成超大數(shù)據(jù)量的excel文件時(shí)這顯然...
關(guān)于 PHP 導(dǎo)出 excel csv 常用的有 PHPexcel ,本文整理了一些其他方案。 高性能 Excel 擴(kuò)展 sudo apt-get install -y zlib1g-dev git clone https://github.com/jmcnamara/libxlsxwriter.git cd libxlsxwriter make && sudo make install // ...
摘要:四層負(fù)載均衡不會(huì)引起超時(shí)。動(dòng)態(tài)修改包的目標(biāo)地址,并轉(zhuǎn)發(fā)數(shù)據(jù)包使其到達(dá)不同的機(jī)器上來(lái)實(shí)現(xiàn)負(fù)載均衡的目的,因此節(jié)點(diǎn)不會(huì)引起超時(shí)。七層負(fù)載均衡等待上游響應(yīng)超時(shí)。例如使用多線程并發(fā)減少遠(yuǎn)程查詢的總體時(shí)間如需數(shù)據(jù)有序,可以使用方案。 B端業(yè)務(wù)經(jīng)常要提供下載報(bào)表的功能,一般的方法是先查詢出所有數(shù)據(jù),然后在內(nèi)存中組裝成報(bào)表(如XLS/XLSX格式)后統(tǒng)一輸出。但是如果生成報(bào)表需要查詢的數(shù)據(jù)量很大,遠(yuǎn)...
摘要:過(guò)去工作中使用較多,碰到并解決了各種大大小小的問(wèn)題,總結(jié)出這樣一篇文章,一方面記錄自己踩過(guò)的坑,一方面與大家分享,讓大家少走彎路,并不斷完善之,歡迎大家去上面和提交,不斷補(bǔ)充和優(yōu)化,打造最全面的開發(fā)解決方案地址原文地址基礎(chǔ)小試牛刀引用文 過(guò)去工作中使用PHPExcel較多,碰到并解決了各種大大小小的問(wèn)題,總結(jié)出這樣一篇文章,一方面記錄自己踩過(guò)的坑,一方面與大家分享,讓大家少走彎路,并不...
閱讀 923·2021-10-18 13:32
閱讀 3525·2021-09-30 09:47
閱讀 2164·2021-09-23 11:21
閱讀 1890·2021-09-09 09:34
閱讀 3488·2019-08-30 15:43
閱讀 1531·2019-08-30 11:07
閱讀 1070·2019-08-29 16:14
閱讀 733·2019-08-29 11:06