傳智播客旗下品牌:|||||

全國咨詢/投訴熱線:400-618-4000

Django海量數據集分頁優化方法

更新時間:2020年08月03日14時55分 來源:傳智播客 瀏覽次數:

學過Django框架的同學,一定都使用過Django框架的Paginator分頁功能,今天我們要討論的是關于使用Paginator進行大數據集分頁時,它性能的優化問題。

Paginator分頁

下面步入正題,首先我們來看一個Django中使用Paginator進行分頁的例子:

1)首先我創建了一個Django項目并定義了一個User用戶模型類

Django海量數據分頁優化01


2)執行遷移在數據庫中生成tb_users用戶表并添加800萬個測試用戶數據

Django海量數據集分頁優化02

3)編寫使用Paginator類進行分頁的測試代碼,并測試獲取相應頁的數據

Django海量數據集分頁優化03

4)分頁測試代碼執行完成之后,我們來看終端輸出的內容

Django海量數據集分頁優化04

5)對于上面的分頁測試結果,我們再來看一下mysql的日志記錄數據

Django海量數據集分頁優化05

注:mysql的日志文件在/var/log/mysql/mysql.log,測試之前可以先使用tail -f /var/log/mysql/mysql.log打開這個文件,測試之后就可以看到對應輸出的日志信息

6)看完上面的內容之后,接下來我們就可以看Django框架關于Paginator類分頁的官網文檔了

Django海量數據集分頁優化06


上面紅色框框里的提示就是告訴我們,在使用Paginator對大數據量的QuerySet進行分頁時,如果請求頁碼較大的某頁數據時,查詢效率可能會很慢,因為Limit/Offset分頁時,先要根據Offset偏移量從前向后掃描數據。

PS:看到這里,是不是感覺到了官網文檔的重要性,很多問題在官網文檔上都有對應的說明,下面附上這個文檔的鏈接:https://docs.djangoproject.com/zh-hans/2.2/topics/pagination/

分頁問題解決

好,說了這么多,最后的問題要來了,怎么解決這個問題呢?下面咱們來說一個很多大廠使用的解決方案,什么方案呢,會不會很高大上呢?

其實很簡單,就是限制用戶請求的最大頁數,比如只允許用戶訪問前100頁的數據,如果請求的頁碼超過100頁,可以默認返回第1頁的數據,這樣就不會有上面的問題,是不是很簡單呢。這個思想也很簡單,大家平時搜索內容或購買商品時,是不是只會瀏覽前幾頁的內容呢?不用我回答,你應該已經有了答案

小知識:百度搜索內容顯示時,只允許用戶訪問前76頁的內容;淘寶搜索上面商品顯示時,只允許用戶訪問前100頁的內容。

最后,怎么知道這個解決方案的?其實還是在文檔,大家請看。

Django海量數據集分頁優化07

附上文檔鏈接:https://code.djangoproject.com/ticket/14131,建議大家平時自己多看文檔,授人以魚不如授人以漁,假以時日,這就是你的漁

好啦,關于大數據集分頁的問題,咱們今天就說到這,有沒有其它方案呢?大家可以多去探索。


猜你喜歡:

“棧”是什么?如何實現一個“棧”?

Python編程加入日志的方法