佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 用Laravel輕松處理千萬級數(shù)據(jù)的方法實現(xiàn)

用Laravel輕松處理千萬級數(shù)據(jù)的方法實現(xiàn)

熱門標(biāo)簽:電子圍欄 科大訊飛語音識別系統(tǒng) Linux服務(wù)器 Mysql連接數(shù)設(shè)置 阿里云 服務(wù)器配置 銀行業(yè)務(wù) 團(tuán)購網(wǎng)站

在Laravel中使用cursor來查詢并處理數(shù)據(jù) (輕松處理千萬級的數(shù)據(jù))

事發(fā)現(xiàn)場

最近在項目中遇到內(nèi)存不足的問題, 測試環(huán)境中的PHP內(nèi)存只有64M,在導(dǎo)出的時候, 數(shù)據(jù)量比較大,這個時候會出現(xiàn)內(nèi)存溢出的錯誤;

如何解決

目前想到兩種方法:

  1. 調(diào)整php.ini文件中memory_limit配置項; 或者在調(diào)用方法中調(diào)整內(nèi)存大小ini_set('memory_limit', "").
  2. 使用Laravel的Lazy Collection.

考慮到修改配置文件的影響范圍過大, 以及對導(dǎo)出的實時性要求不是很高, 所以我們選擇了第二種方法.

Lazy Collection

如何使用Lazy Collection? 很簡單, 將查詢構(gòu)建器鏈末尾的get()更改為cursor()就好了 !

cursor ( )

cursor的原理

cursor的實現(xiàn)使用了 yield 關(guān)鍵字, yield關(guān)鍵字是生成器函數(shù)的核心, 它的調(diào)用形式跟return很像, 不同之處在于return會返回值并且終止函數(shù)執(zhí)行, 而yield會返回值給循環(huán)調(diào)用生成器的代碼并且只是暫停生成器函數(shù).

cursor()的代碼如下

 /** 
  * 
  Get a generator for the given query. 
  * 
  * @return Generator
  */
 public function cursor() {
  foreach ($this->applyScopes()->query->cursor() as $record) { 
    yield $this->newModelInstance()->newFromBuilder($record);
  } 
 }

由于使用了yield關(guān)鍵字, 在循環(huán)cursor生成器的時候,可以漸進(jìn)式的處理數(shù)據(jù),即使在內(nèi)存很小的情況下,也可以輕松處理千萬級的數(shù)據(jù)! 真的是非常方便哦!

到此這篇關(guān)于用Laravel輕松處理千萬級數(shù)據(jù)的方法實現(xiàn)的文章就介紹到這了,更多相關(guān)Laravel 處理千萬級數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Laravel框架數(shù)據(jù)庫CURD操作、連貫操作總結(jié)
  • Laravel 5框架學(xué)習(xí)之?dāng)?shù)據(jù)庫遷移(Migrations)
  • Laravel 5框架學(xué)習(xí)之向視圖傳送數(shù)據(jù)
  • Laravel 批量更新多條數(shù)據(jù)的示例
  • Laravel接收前端ajax傳來的數(shù)據(jù)的實例代碼
  • Laravel 5框架學(xué)習(xí)之向視圖傳送數(shù)據(jù)(進(jìn)階篇)
  • laravel框架查詢數(shù)據(jù)集轉(zhuǎn)為數(shù)組的兩種方法
  • Laravel中數(shù)據(jù)遷移與數(shù)據(jù)填充的詳細(xì)步驟
  • laravel框架之?dāng)?shù)據(jù)庫查出來的對象實現(xiàn)轉(zhuǎn)化為數(shù)組
  • Laravel實現(xiàn)批量更新多條數(shù)據(jù)

標(biāo)簽:衡水 萍鄉(xiāng) 蚌埠 大理 棗莊 廣元 衢州 江蘇

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用Laravel輕松處理千萬級數(shù)據(jù)的方法實現(xiàn)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    怀化市| 新沂市| 象州县| 乳源| 安多县| 鲜城| 平安县| 邵武市| 砀山县| 东乡| 仪征市| 彭山县| 故城县| 原阳县| 隆化县| 云和县| 鹰潭市| 蓝田县| 平武县| 顺义区| 长葛市| 固安县| 黎城县| 健康| 库尔勒市| 孟村| 安泽县| 华池县| 蕉岭县| 文登市| 汽车| 苍南县| 锦屏县| 金湖县| 县级市| 河北省| 花垣县| 玉树县| 通州区| 沁阳市| 沂源县|