国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SQL攔截:想要限制每次查詢的結(jié)果集不能超過(guò)10000行,該如何實(shí)現(xiàn)?

這篇具有很好參考價(jià)值的文章主要介紹了SQL攔截:想要限制每次查詢的結(jié)果集不能超過(guò)10000行,該如何實(shí)現(xiàn)?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

實(shí)踐出真知,歡迎關(guān)注我的公眾號(hào):Hoeller

對(duì)于一些Saas化軟件,當(dāng)某個(gè)租戶在執(zhí)行查詢SQL時(shí),如果查詢條件出現(xiàn)了BUG,導(dǎo)致去查了所有租戶的數(shù)據(jù),這種情況是非常嚴(yán)重的,此時(shí)就需要在架構(gòu)層面做限制,禁止一些特殊SQL的執(zhí)行,另外,為了保護(hù)數(shù)據(jù)庫(kù),也可能會(huì)限制某些查詢語(yǔ)句不要查詢太多的數(shù)據(jù),那么怎樣在平臺(tái)架構(gòu)層面對(duì)業(yè)務(wù)層的SQL做攔截和校驗(yàn)?zāi)??本文分享一下我司的做法?/p>

我們集團(tuán)里有的項(xiàng)目用的Mybatis,有的項(xiàng)目用的Spring Data JPA,共同點(diǎn)在于都用的Druid連接池,所以可以在Druid層面做SQL的攔截和校驗(yàn)。

Druid提供了FilterEventAdapter機(jī)制,可以用來(lái)攔截?cái)?shù)據(jù)庫(kù)連接的創(chuàng)建、Statement或PreparedStatement的創(chuàng)建、SQL語(yǔ)句的執(zhí)行等等,我們可以自定義一個(gè)FilterEventAdapter:
sql 限制條數(shù),java,架構(gòu),sql

其中statementExecuteQueryBefore()方法表示在執(zhí)行某個(gè)查詢語(yǔ)句前的攔截點(diǎn),preparedStatement_executeQuery()方法表示執(zhí)行查詢語(yǔ)句的地方,比如正常情況下preparedStatement_executeQuery()方法順利執(zhí)行的話就會(huì)得到ResultSetProxy,可以理解為就是ResultSet,也就代表查詢結(jié)果集。

所以如果我們想做查詢語(yǔ)句的攔截,這兩個(gè)方法都可以做到,回到文章題目:想要限制每次查詢的結(jié)果集不能超過(guò)10000行,該如何實(shí)現(xiàn)?我這里給兩種不同的實(shí)現(xiàn)方式。

對(duì)于某一個(gè)查詢SQL,我們首先得知道這個(gè)SQL將會(huì)查出多少條數(shù)據(jù),那就得把該查詢SQL,比如select a,b,c from t where a=1,改造成為select count(1) from t where a=1,執(zhí)行改造后的count語(yǔ)句就能知道原始SQL會(huì)查出多少條記錄了。

我這里提供一個(gè)方法,能夠把簡(jiǎn)單的select語(yǔ)句改造為count語(yǔ)句(原諒我不能把公司內(nèi)部的代碼貼出來(lái)~~~)
sql 限制條數(shù),java,架構(gòu),sql

然后,我們就能在statementExecuteQueryBefore()方法中做攔截判斷了:
sql 限制條數(shù),java,架構(gòu),sql

這種方式的好處是:如果某個(gè)查詢SQL確實(shí)超過(guò)限制了,那么就它被攔截了,但是缺點(diǎn)是:如果很多SQL并沒(méi)有超過(guò)限制,那么就多余執(zhí)行了count語(yǔ)句,降低了性能。

那么我們來(lái)看看第二種方案,這種方法重寫的是preparedStatement_executeQuery方法,思路是:先執(zhí)行原始SQL,得到ResultSet,然后通過(guò)ResultSet來(lái)判斷結(jié)果集是否超過(guò)了限制,如果超過(guò)了限制則告警,比如代碼為:
sql 限制條數(shù),java,架構(gòu),sql

這種方案和第一種方案的優(yōu)缺點(diǎn)正好相反,優(yōu)點(diǎn)是:沒(méi)有額外執(zhí)行count語(yǔ)句,缺點(diǎn)是:如果查詢語(yǔ)句確實(shí)超過(guò)了限制只能事后告警了。

這兩種方案似乎魚和熊掌不可兼得,大家覺(jué)得哪個(gè)方案更好呢?

我是大都督,之前是一名講師,現(xiàn)在是一名架構(gòu)師,實(shí)踐才能出真知,這是我重回一線的原因!如果大家覺(jué)得有所收獲,可以關(guān)注我的公眾號(hào):Hoeller,里面也有我的聯(lián)系方式,歡迎勾搭。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-754360.html

到了這里,關(guān)于SQL攔截:想要限制每次查詢的結(jié)果集不能超過(guò)10000行,該如何實(shí)現(xiàn)?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MyBatis攔截器-打印出真正執(zhí)行的sql語(yǔ)句和執(zhí)行結(jié)果

    MyBatis攔截器-打印出真正執(zhí)行的sql語(yǔ)句和執(zhí)行結(jié)果

    目錄 廣而告之 背景 先看成品 實(shí)現(xiàn)步驟 第一步,實(shí)現(xiàn)Interceptor接口 ?編輯 第二步,給攔截器指定要攔截的方法簽名 第三步,實(shí)現(xiàn)攔截器的intercept方法。 第四步,在mybatis-config.xml里配置上這個(gè)攔截器插件 第五步,禁用mybatis打印日志 給大家推薦一個(gè)好用的在線工具網(wǎng)站: 常

    2023年04月25日
    瀏覽(32)
  • 如何在 Python 中執(zhí)行 MySQL 結(jié)果限制和分頁(yè)查詢

    如何在 Python 中執(zhí)行 MySQL 結(jié)果限制和分頁(yè)查詢

    限制結(jié)果數(shù)量 示例 1: 獲取您自己的 Python 服務(wù)器 選擇 \\\"customers\\\" 表中的前 5 條記錄: 如果您想返回從第三條記錄開始的五條記錄,可以使用 \\\"OFFSET\\\" : 示例 2: 從位置 3 開始,返回 5 條記錄 示例 注意:您可以使用JOIN代替INNER JOIN,它們都會(huì)給您相同的結(jié)果。 在上面的示

    2024年02月05日
    瀏覽(20)
  • SQL:查詢結(jié)果升序、降序排列

    SQL:查詢結(jié)果升序、降序排列

    SQL 查詢時(shí),查詢結(jié)果按照某一列參數(shù)升序或者降序排列后再輸出是常見(jiàn)的用法,本文主要介紹了利用 order by 對(duì)輸出結(jié)果進(jìn)行排序的用法 本文部分內(nèi)容參考自: SQL37 查找后多列排序 SQL38 查找后降序排列 一句話說(shuō)明:order by 可以按照降序或者升序?qū)z索結(jié)果進(jìn)行排序 強(qiáng)調(diào):

    2024年02月05日
    瀏覽(25)
  • MyBatis動(dòng)態(tài)SQL、模糊查詢與結(jié)果映射

    MyBatis動(dòng)態(tài)SQL、模糊查詢與結(jié)果映射

    目錄 前言 一、MyBatis動(dòng)態(tài)SQL 1.動(dòng)態(tài)SQL是什么 2.動(dòng)態(tài)SQL的作用 3.常用動(dòng)態(tài)SQL元素 1. where + if 元素 2. set + if 元素 3. choose + when + otherwise 元素 4. 自定義 trim 元素 ?1. 自定義 trim 元素改寫上面的 where + if 語(yǔ)句 2. 自定義 trim 元素改寫上面的 set + if 語(yǔ)句 5. foreach 元素 6.SQL片段重用 二、

    2024年02月11日
    瀏覽(45)
  • SQL - 將查詢結(jié)果插入到另一張表中

    注意:字段必須一致(位置一致,類型一致),否則會(huì)出現(xiàn)數(shù)據(jù)轉(zhuǎn)換錯(cuò)誤。 例如,要將 test 表插入到 newTest 表中,則可以通過(guò)如下SQL語(yǔ)句實(shí)現(xiàn): 使用場(chǎng)景: 從一個(gè)表中選取數(shù)據(jù),然后把數(shù)據(jù)插入另一個(gè)表中。常用于創(chuàng)建表的備份復(fù)件或者用于對(duì)記錄進(jìn)行存檔。

    2024年02月16日
    瀏覽(19)
  • 「SQL面試題庫(kù)」 No_80 查詢結(jié)果的質(zhì)量和占比

    「SQL面試題庫(kù)」是由 不是西紅柿 發(fā)起,全員免費(fèi)參與的SQL學(xué)習(xí)活動(dòng)。我每天發(fā)布1道SQL面試真題,從簡(jiǎn)單到困難,涵蓋所有SQL知識(shí)點(diǎn),我敢保證只要做完這100道題,不僅能輕松搞定面試,代碼能力和工作效率也會(huì)有明顯提升。 1.1 活動(dòng)流程 整理題目 :西紅柿每天無(wú)論刮風(fēng)下雨

    2024年02月09日
    瀏覽(35)
  • Springboot 自定義 Mybatis攔截器,實(shí)現(xiàn) 動(dòng)態(tài)查詢條件SQL自動(dòng)組裝拼接(玩具)

    Springboot 自定義 Mybatis攔截器,實(shí)現(xiàn) 動(dòng)態(tài)查詢條件SQL自動(dòng)組裝拼接(玩具)

    ps:最近在參與3100保衛(wèi)戰(zhàn),戰(zhàn)況很激烈,剛剛打完仗,來(lái)更新一下之前寫了一半的博客。 該篇針對(duì)日常寫查詢的時(shí)候,那些動(dòng)態(tài)條件sql 做個(gè)簡(jiǎn)單的封裝,自動(dòng)生成(拋磚引玉,搞個(gè)小玩具,不喜勿噴)。 來(lái)看看我們平時(shí)寫那些查詢,基本上都要寫的一些動(dòng)態(tài)sql: ? 一個(gè)字段

    2024年02月12日
    瀏覽(30)
  • MyBatis進(jìn)階:掌握MyBatis動(dòng)態(tài)SQL與模糊查詢、結(jié)果映射,讓你在面試中脫穎而出!!

    MyBatis進(jìn)階:掌握MyBatis動(dòng)態(tài)SQL與模糊查詢、結(jié)果映射,讓你在面試中脫穎而出!!

    目錄 一、引言 二、MyBatis動(dòng)態(tài)SQL 2.1.if元素使用 2.2.foreach元素使用 三、MyBatis模糊查詢 ①使用#{字段名} ②使用${字段名} ③使用concat{\\\'%\\\',#{字段名},\\\'%\\\'} 總結(jié) 四、MyBatis結(jié)果映射 4.1.案例演示 4.1.1.resultType進(jìn)行結(jié)果映射 4.1.2.resultMap進(jìn)行結(jié)果映射 在當(dāng)今的軟件開發(fā)環(huán)境中,數(shù)據(jù)庫(kù)的使

    2024年02月11日
    瀏覽(21)
  • axios攔截器:每次請(qǐng)求自動(dòng)帶上 token

    Step 1:創(chuàng)建Axios實(shí)例并添加攔截器 在你的Vue項(xiàng)目中,一般我們會(huì)先導(dǎo)入axios,然后創(chuàng)建一個(gè)axios實(shí)例。這樣做是為了方便統(tǒng)一管理和配置。 上面的代碼做了什么呢? 1. 我們創(chuàng)建了一個(gè)axios實(shí)例service,相當(dāng)于有了一個(gè)專屬郵差。 2. 給這個(gè)郵差設(shè)置了規(guī)則:每次出門送信前,先檢

    2024年04月09日
    瀏覽(27)
  • Python3,多種方法,同時(shí)執(zhí)行多條SQL語(yǔ)句,并把查詢結(jié)果分別寫入不同Sheet頁(yè),妥妥的學(xué)到了。

    Python3,多種方法,同時(shí)執(zhí)行多條SQL語(yǔ)句,并把查詢結(jié)果分別寫入不同Sheet頁(yè),妥妥的學(xué)到了。

    小屌絲 :魚哥,我想請(qǐng)教一個(gè)問(wèn)題。 小魚 :國(guó)慶假期你經(jīng)歷了什么,讓你變得如此的 “ 善良 ”? 小屌絲 :別這么說(shuō),我一直很善良,至少,很正直… 小魚 :打住,直接點(diǎn), 你有什么需要幫助的? 小屌絲 :我就是想把查詢的結(jié)果也入到excel表中 小魚 :然后呢? 小屌絲 :

    2024年02月08日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包