第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

數(shù)據(jù)量大。迭代而不耗盡內(nèi)存的最佳方法?

數(shù)據(jù)量大。迭代而不耗盡內(nèi)存的最佳方法?

PHP
MMMHUHU 2023-09-08 17:14:08
使用 Laravel 6 等 Eloquent Collection 類(lèi)。所以我有“很多”數(shù)據(jù)需要處理。大約 5000 行,在獲取它時(shí),會(huì)生成一個(gè)包含 5000 個(gè)模型的集合?,F(xiàn)在,每個(gè)模型可能都有 20 個(gè)屬性需要讀取。有沒(méi)有快速的方法來(lái)做到這一點(diǎn)?我目前有一個(gè)要讀取的屬性數(shù)組,然后像這樣設(shè)置循環(huán):\fopen()...foreach ($models as $model) {            $row = [];            foreach ($this->attributes as $attr) {                $row[] = \data_get($model, $attr);            }                \fputcsv($fh, $row);}\fclose()...$models是一個(gè) Laravel 集合,由其中創(chuàng)建,EloquentModel::find($ids);其中$ids是整數(shù)數(shù)組。(來(lái)自數(shù)據(jù)庫(kù)的 5000 個(gè) ID)$this指的是包含 foreach 循環(huán)的類(lèi)。attributes除了包含上面代碼的函數(shù)和只是一個(gè)字符串?dāng)?shù)組的屬性之外,這個(gè)類(lèi)中沒(méi)有其他任何東西。對(duì)于 5000 行,每行循環(huán) 20 個(gè)屬性,這可能需要很長(zhǎng)時(shí)間來(lái)處理,并且在每種情況下,這實(shí)際上都會(huì)拋出FatalErrorException:  Allowed memory size of 134217728 bytes exhausted那么檢索每行屬性集的最快方法是什么?我個(gè)人想不出比這個(gè)嵌套循環(huán)更快的循環(huán)了。此外,看到\fputcsv()將每一行寫(xiě)入文件,并且$row變量在每個(gè)循環(huán)中被覆蓋,為什么我仍然得到Allowed memory size exhausted?LazyCollection 是這里的解決方案嗎?
查看完整描述

1 回答

?
紫衣仙女

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊

這將一次處理 200 個(gè)塊中的模型,從而節(jié)省大量?jī)?nèi)存。


Model::whereIn('id', $ids)->chunk(200, function($models){


      foreach ($models as $model) {

            $row = [];

            foreach ($this->attributes as $attr) {

                $row[] = \data_get($model, $attr);

            }

        

        \fputcsv($fh, $row);

      }

});


查看完整回答
反對(duì) 回復(fù) 2023-09-08
  • 1 回答
  • 0 關(guān)注
  • 106 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)