第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 Go 中使用頁(yè)碼和限制進(jìn)行分頁(yè)的最佳做法是什么?

在 Go 中使用頁(yè)碼和限制進(jìn)行分頁(yè)的最佳做法是什么?

Go
繁花不似錦 2023-04-04 16:59:45
我使用頁(yè)碼和限制在 Go 中創(chuàng)建了分頁(yè)。在哪里L(fēng)imit & Page Number are INT我創(chuàng)建了如下分頁(yè):MONGO_SESSION.Find(nil).Skip(pageNumber*limit).Limit(limit).Sort("_id").All(&RETURN_STRUCT)它工作正常。但是當(dāng)我發(fā)送頁(yè)碼或限制為零時(shí)。默認(rèn)情況下,mongo DB 返回所有記錄,因?yàn)闆](méi)有什么可以跳過(guò)和限制的。所以我的問(wèn)題是,在零限制和零頁(yè)碼的情況下,什么是好的做法。實(shí)踐一:發(fā)送所有數(shù)據(jù)。不要發(fā)送錯(cuò)誤響應(yīng)。實(shí)踐 2:發(fā)送錯(cuò)誤響應(yīng)說(shuō)“頁(yè)碼和限制不能為零”注意:我不能硬編碼限制或頁(yè)碼。任何建議將不勝感激。
查看完整描述

3 回答

?
慕運(yùn)維8079593

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊

這個(gè)問(wèn)題有點(diǎn)基于意見(jiàn)(因此對(duì)于 StackOverflow 來(lái)說(shuō)有點(diǎn)偏離主題),但我認(rèn)為一些建議或一般做法可能對(duì)其他人有幫助和有用。因此,以下答案是我的意見(jiàn)。

作為服務(wù)器應(yīng)用程序的開(kāi)發(fā)人員,您應(yīng)對(duì)服務(wù)器的安全和保障以及服務(wù)器資源的利用負(fù)責(zé)。作為開(kāi)發(fā)人員,您應(yīng)該在必要的最低限度內(nèi)信任客戶(hù)。

也就是說(shuō),當(dāng)客戶(hù)未能指定限制(無(wú)意或有意)時(shí)發(fā)送所有文件是處理這種情況的最糟糕方法。這就像尖叫:“嘿,客戶(hù)和黑客,這是一個(gè)端點(diǎn),如果你想對(duì)我的服務(wù)器進(jìn)行DoS 攻擊,只需調(diào)用這個(gè)端點(diǎn)幾次”。

為了保護(hù)您的服務(wù)器,即使對(duì)于“l(fā)imit”參數(shù),您也應(yīng)該有一個(gè)安全限制,因?yàn)樵试S它的任何值都可能同樣糟糕:僅僅因?yàn)槟鷱?qiáng)制客戶(hù)端指定一個(gè)限制并不能保護(hù)您的服務(wù)器,“bad”客戶(hù)也可以發(fā)送一個(gè)限制,比如1e9很可能包括您的所有文件。

我的建議是始終具有有意義的默認(rèn)值安全限制。應(yīng)始終記錄默認(rèn)值,安全限制并不那么重要(但也可以記錄)。

那么你應(yīng)該如何處理它:

  1. 如果缺少限制,請(qǐng)應(yīng)用默認(rèn)值。如果您不能有默認(rèn)值,請(qǐng)?zhí)^(guò)此步驟(盡管必須有充分的理由不具有/允許默認(rèn)值)。

  2. 應(yīng)根據(jù)安全限值檢查限值。如果超過(guò)安全值,則使用安全限制(最大允許限制)。

  3. 如果服務(wù)器“有權(quán)”更改請(qǐng)求的限制(例如,在缺少限制時(shí)使用默認(rèn)值,或根據(jù)安全限制限制限制),服務(wù)器應(yīng)將實(shí)際用于服務(wù)的限制傳達(dá)給客戶(hù)端要求。

關(guān)于高效的 MongoDB 分頁(yè):我只建議使用Query.Skip()andQuery.Limit()用于“小”文檔計(jì)數(shù)。


查看完整回答
反對(duì) 回復(fù) 2023-04-04
?
HUX布斯

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊

我相信,分頁(yè)應(yīng)該只用于集合大小很大的情況(否則只是一次顯示所有數(shù)據(jù)并且根本不要擺弄分頁(yè))。

但是,如果集合相當(dāng)大,那么發(fā)送所有數(shù)據(jù)并不是一個(gè)好主意。

“skip”語(yǔ)句還有一個(gè)問(wèn)題(雖然它不是 mongo 獨(dú)有的):為了跳過(guò) N 條記錄,數(shù)據(jù)庫(kù)必須進(jìn)行全掃描(如果是 mongo,則為全集合掃描),因此需要更多時(shí)間獲取第 N + 1 頁(yè)的結(jié)果而不是第 N 頁(yè)的結(jié)果。

現(xiàn)在,為了處理它,有一個(gè)“技巧”:根本不要使用 skip,而是“記住”最后一個(gè)文檔 ID(無(wú)論如何它已經(jīng)編入索引并且您仍然可以排序_id)。然后查詢(xún)將是(偽代碼,因?yàn)槲也粫?huì)說(shuō)“Go”):

  • 對(duì)于第一個(gè)查詢(xún): Find().sort(_id).limit(limitSize)

  • 對(duì)于后續(xù)查詢(xún): Find ().where(_id > lastMemorizedId).sort(_id).limit(limitSize)


查看完整回答
反對(duì) 回復(fù) 2023-04-04
?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊

我也遇到了同樣的問(wèn)題。我更喜歡發(fā)送錯(cuò)誤響應(yīng)而不是顯示所有數(shù)據(jù)。

因?yàn)槿绻?DB 必須發(fā)送所有數(shù)據(jù),這對(duì) DB 來(lái)說(shuō)是一項(xiàng)繁重的事務(wù)。在小型集合上,它工作正常,但對(duì)于大型集合,它會(huì)掛起 DB。

所以發(fā)送一個(gè)錯(cuò)誤響應(yīng)。


查看完整回答
反對(duì) 回復(fù) 2023-04-04
  • 3 回答
  • 0 關(guān)注
  • 177 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)