国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

采用Seek Method加速分頁

468122151 / 1547人閱讀

摘要:整個代碼形似代碼它的原理很簡單,其實就是利用可以利用的來加速分頁。需要提醒的是,上需要有才有意義,而且它可以有多列采用這種方式的分頁可以避免上述分頁的潛在危險當頁數達到一定量之后,分頁速度會嚴重下降。

凡事做過頁面的,一般對分頁不會陌生,也不會覺得它有多難:就是limit + offset的組合就可以了呀。但是,危險往往都是從最不起眼的地方開始的。在這里,我先說一下我之前在用MongoDB時遇到的問題。這類問題同樣會出現在這種分頁方式上。

當時,我需要對于MongoDB中的數據進行處理,每次處理一批,也相當于是按頁來操作數據啦。這個沒啥難度,直接使用API中的find + skip + limit就可以輕易搞定。迅速把程序寫完之后就開始拿產品庫開搞了。剛開始一切正常,可過了沒多久,就發現整個程序的性能下降了。進入Mongo一查,發現是Table Scan。哇,那個collection中有上千萬的數據啊!

此處略去3000字。

總之,問題最后解決了,程序又運行如飛。而解決之道很簡單:只用find + limit,不再使用skip(原因自己想)。只不過在find中加了一個條件:上一批的最后一個document的_id。整個代碼形似(groovy代碼):

if (docId) {
    batch = collection.find(["_id": ["$gt": docId]] as Document).limit(BATCH_SIZE)
} else {
    batch = collection.find().limit(BATCH_SIZE)
}
docId = batch[-1]["_id"]

它的原理很簡單,其實就是利用可以利用的index來加速分頁。這種思想跟今天看到的文章的思路如出一轍,不再使用offset,尋找能達到同樣效果的index,用它來助力搜索。因此,文中給出的方案跟上面的代碼類似:

SELECT ...
  FROM ...
 WHERE ...
   AND id < ?last_seen_id
 ORDER BY id DESC
 FETCH FIRST 10 ROWS ONLY

這種分頁方式被稱為“seek method”,其中的id被稱為“seek predicate”。典型的seek predicate還可以是日期。需要提醒的是,seek predicate上需要有index才有意義,而且它可以有多列!采用這種方式的分頁可以避免上述分頁的潛在危險:當頁數達到一定量之后,分頁速度會嚴重下降。

關于seek method,還可以參考下面的文章:

https://blog.jooq.org/2013/10...

http://use-the-index-luke.com...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/18948.html

相關文章

  • Spring Boot學習筆記(六)結合MyBatis實現較為復雜的RESTful API

    摘要:前兩篇已經構建了標準工程實例,也整合了實現了簡單數據庫訪問,本篇主要更深入的學習下,實現較為完整的數據庫的標準服務。到這里,最復雜的數據訪問基本就算編寫完了。 前兩篇已經構建了RESTful API標準工程實例,也整合了MyBatis實現了簡單數據庫訪問,本篇主要更深入的學習下,實現較為完整的數據庫CRUD的標準服務。 首先看下要實現的效果吧,完成下面截圖部分的API,除了CRUD之外...

    CntChen 評論0 收藏0
  • Java IO (三) 讀取其他進程數據,RandomAccessFile,序列化和反序列化

    摘要:虛擬機讀取其他進程的數據對象的方法可以運行平臺上的其他程序該方法產生一個對象對象代表由該程序啟動啟動的子進程類提供如下三個方法用于和其子進程通信獲取子進程的錯誤流獲取子進程的輸入流獲取子進程的輸出流這里的輸入流輸出流容易混淆從程序的角度思考 Java虛擬機讀取其他進程的數據 Runtime對象的exec方法可以運行平臺上的其他程序,該方法產生一個Process對象,Process對象...

    zhangfaliang 評論0 收藏0
  • android ijkplayer c層分析-初始化(續1 java層與c層銜接)

    摘要:初始化的過程上一篇其實并未完全分析完,這回接著來。層的函數中,最后還有的調用,走的是層的。結構體如下的和,以及,其余是狀態及的內容。整個過程是個異步的過程,并不阻塞。至于的東西,都是在層創建并填充的。 初始化的過程上一篇其實并未完全分析完,這回接著來。java層的initPlayer函數中,最后還有native_setup的調用,走的是c層的IjkMediaPlayer_native_...

    Olivia 評論0 收藏0
  • 關于WEB前后端分離的要點總結(上)

    摘要:前言對于前后端分離大家可能在網上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對于前后端的分離問題的多年工作經驗的總結。今天,我們把這些經驗總結知識點分享給大家,希望可以幫助到大家。添加開啟黑白名單,任選其一。 前言 對于前后端分離大家可能在網上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對于前后端的分離問題的多年工作經驗的總結。今天,我們把這些經驗總結知...

    FullStackDeveloper 評論0 收藏0

發表評論

0條評論

468122151

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<