摘要:場(chǎng)景當(dāng)數(shù)據(jù)兩足夠大的時(shí)候,一頁(yè)展示不完的時(shí)候,我們經(jīng)常會(huì)需要分頁(yè)的功能。方案三,數(shù)據(jù)比較大,排序需要排序當(dāng)數(shù)據(jù)量比較大的時(shí)候,并且需要排序的時(shí)候,可以使用這種情況。
場(chǎng)景
當(dāng)數(shù)據(jù)兩足夠大的時(shí)候,一頁(yè)展示不完的時(shí)候,我們經(jīng)常會(huì)需要分頁(yè)的功能。
方案 方案一,數(shù)據(jù)不是很大需要排序
s := globalS.Copy() c := s.DB(db).C(collection) defer s.Close() return c.Find(query).Select(selector).Sort(sort).Skip(100).Limit(20).All(result)
這中情況只適用于數(shù)據(jù)量比較小的時(shí)候,當(dāng)數(shù)據(jù)量達(dá)到一定量,sort會(huì)內(nèi)存益處報(bào)錯(cuò)
方案二,數(shù)據(jù)比較大不需要排序
s := globalS.Copy() c := s.DB(db).C(collection) defer s.Close() return c.Find(query).Select(selector).Skip(100).Limit(20).All(result)
當(dāng)數(shù)據(jù)量比較大的時(shí)候,可以使用這種情況。如果需要排序,那就取得返回值后在排序。
方案三,數(shù)據(jù)比較大,排序需要排序
var result []interface{} s := globalS.Copy() c := s.DB(db).C(collection) defer s.Close() pipeM := []bson.M{ {"$match": bson.M{"status": "true"}}, {"$skip": start}, {"$limit": end}, {"$sort": bson.M{"height": -1}}, } pipe := c.Pipe(pipeM) err = pipe.All(&result)
當(dāng)數(shù)據(jù)量比較大的時(shí)候,并且需要排序的時(shí)候,可以使用這種情況。因?yàn)樵趕kip,limit和sort同時(shí)出現(xiàn)的時(shí)候,由于有優(yōu)先級(jí),需要無(wú)論順序如何,都是先執(zhí)行sort,在執(zhí)行skip,最后執(zhí)行l(wèi)imit,但是我們使用聚合,也就是mgo里面的pipeline,可以改變執(zhí)行的先后順序。
結(jié)束語(yǔ)上面的三種情況都不適用大量的數(shù)據(jù),首先是skip的限制,有人建議邊查詢(xún)邊排序,我沒(méi)有嘗試
如果數(shù)據(jù)量過(guò)大,我建議使用分庫(kù)分表的方式來(lái)完成,這樣加上GO語(yǔ)言的多線程,可以很快的查詢(xún)和聚合
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/19568.html
摘要:分頁(yè)正反偏移數(shù)據(jù)庫(kù)自帶的和的限制條件為我們創(chuàng)建了分頁(yè)的查詢(xún)方式,但是如果利用不對(duì),性能會(huì)出現(xiàn)千倍萬(wàn)倍差異。這兩條是為查詢(xún)最后一頁(yè)的翻頁(yè)查詢(xún)用的。緩存和不精準(zhǔn)數(shù)據(jù)量達(dá)到一定程度的時(shí)候,用戶(hù)根本就不關(guān)心精準(zhǔn)的總數(shù)沒(méi)人關(guān)心差幾個(gè)。 軟件開(kāi)發(fā)中,常用要用到分頁(yè)、計(jì)算總數(shù),數(shù)據(jù)量超過(guò)千萬(wàn)、上億的時(shí)候,往往count 的需要超過(guò) 1s 的執(zhí)行時(shí)間,甚至 3-5s,對(duì)于一個(gè)追求性能的前沿團(tuán)隊(duì)來(lái)說(shuō),這...
閱讀 1453·2021-11-15 18:11
閱讀 2579·2021-08-19 10:56
閱讀 733·2021-08-09 13:42
閱讀 886·2019-08-30 15:53
閱讀 2141·2019-08-30 10:55
閱讀 3219·2019-08-29 17:18
閱讀 1510·2019-08-29 13:45
閱讀 620·2019-08-29 13:15