類比登陸圖書館 自動發郵件的程式最佳化思路

來源:互聯網
上載者:User
關鍵字 php 類比登陸 演算法 最佳化
用php CI架構(這個無所謂,主要是想問一下思路)寫的一個檢測圖書館書籍借閱時間,自動發送郵件的功能。

流程

1、查詢資料庫
2、取得使用者帳號和密碼,類比登陸
3、抓取圖書資訊,取得使用者所有圖書到期時間,判斷如果時間小於兩天,發送郵件。
4、重複 2、3步驟,直到遍曆完所有使用者。

當使用者人數達到3萬時,程式會不會不崩掉,應該怎麼最佳化。想問一下,最佳化的思路。

public function email()    {         $data = $this->lib_model->M_getUserAndEmail();//取得使用者賬戶         foreach ($data as $keys){              $bookData = $this->imitateLogin($keys['sdutnum'],$keys['lib_pwd']);//類比登陸             for($i=1;$i<=$bookData['bookNum'];$i++) //遍曆使用者所有圖書             {                $returnTime = substr($bookData['bookArray']['0'][$i*8+4],65,-13);//擷取還書時間                $day = floor((strtotime($returnTime) - strtotime(date('Y-m-d')))/86400); //計算圖書距離歸還的時間                $bookName = substr($bookData['bookArray']['0'][$i*8+1],111,-10);                $title = "山東理工圖書到期提醒";                $content = $keys['sdutnum'].",您的".$bookName."將於".$returnTime."到期";/*add link about address in here.*/                if($day<=2){                    $this->sendEmail($keys['email'],$title,$content); //發送郵件                    echo "郵件發送完成";                }            }         }    }

回複內容:

用php CI架構(這個無所謂,主要是想問一下思路)寫的一個檢測圖書館書籍借閱時間,自動發送郵件的功能。

流程

1、查詢資料庫
2、取得使用者帳號和密碼,類比登陸
3、抓取圖書資訊,取得使用者所有圖書到期時間,判斷如果時間小於兩天,發送郵件。
4、重複 2、3步驟,直到遍曆完所有使用者。

當使用者人數達到3萬時,程式會不會不崩掉,應該怎麼最佳化。想問一下,最佳化的思路。

public function email()    {         $data = $this->lib_model->M_getUserAndEmail();//取得使用者賬戶         foreach ($data as $keys){              $bookData = $this->imitateLogin($keys['sdutnum'],$keys['lib_pwd']);//類比登陸             for($i=1;$i<=$bookData['bookNum'];$i++) //遍曆使用者所有圖書             {                $returnTime = substr($bookData['bookArray']['0'][$i*8+4],65,-13);//擷取還書時間                $day = floor((strtotime($returnTime) - strtotime(date('Y-m-d')))/86400); //計算圖書距離歸還的時間                $bookName = substr($bookData['bookArray']['0'][$i*8+1],111,-10);                $title = "山東理工圖書到期提醒";                $content = $keys['sdutnum'].",您的".$bookName."將於".$returnTime."到期";/*add link about address in here.*/                if($day<=2){                    $this->sendEmail($keys['email'],$title,$content); //發送郵件                    echo "郵件發送完成";                }            }         }    }

不管你其他的業務,假設你現在有了使用者資訊,和其所借書籍歸還時間
說下這塊的最佳化.
先說你現在業務的缺點,你上面說遍曆所有的資料,這是很不合適的資料一多,速度慢不說,而且效率很低,時間複雜度都是 O(n).
如果是我做,我會有兩個指令碼
一個指令碼每3個小時搜集一次使用者的借書資訊,把使用者郵箱,歸還日期插入到 redis 的有序集合中, score 用日期

一個指令碼每天淩晨跑一次,從 redis 有序集合中擷取兩天內要還書的使用者資料,條件就是

score <  time()+兩天秒數

不會,使用者量3W,實際上在兩天內需要還書的並不會是3W,即使飽和來說3W來說,這個資料量也不大

你說的查詢資料庫擷取使用者密碼,我不知道是圖書館方面找你做還是你自己做,如果是圖書館項目,你都能查資料庫了,還要什麼類比登入。如果是自己做,首先你要想一想前兩步能不能搞定。?

有資料庫許可權的話,完全沒必要類比登入

最佳化建議:

1、使用者類比登入:可以緩衝COOKIE?

2、掃描最佳化:可以根據使用者緩衝圖書資訊嗎?加快掃描速度?

3、郵件發送:可以使用非同步方式嗎?

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.