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

批量循環(huán)查詢

這篇具有很好參考價(jià)值的文章主要介紹了批量循環(huán)查詢。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1、rpc批量查詢

    private List<DTO> query(String code, Integer type) {

        List<DTO> resultList = new ArrayList<>();
        List<DTO> skuList;
  
        //01.構(gòu)造req
        Req request = buildTRequest(code, type);
        Response response;
        int fetchedCount = 0;
        int maxCycle = 1;
        boolean needMoreFetch = true;
        while (maxCycle <= 1000) {
            maxCycle++;
            try {
                response = skuGateway.query(request);
            } catch (Exception e) {
                throw new GatewayException(1,
                        String.format("獲取sku失敗 code:[%s]", code), e);
            }
            skuList = response.getData();
            
            if (CollectionUtils.isNotEmpty(skuList)) {
                resultList.addAll(skuList);
                fetchedCount += skuList.size();
            }

            if (total <= fetchedCount) {
                needMoreFetch = false;
            } else {
                request.setOffset(fetchedCount);
            }
        }
        return resultList;
    }

2、200、200條查詢db數(shù)據(jù)

  • eg1
private void query(Request request) {

        int page = 1;
        List<DO> dOList = query(request, page);
        while (CollectionUtils.isNotEmpty(dOList) && page <= 1000) {//一次200,循環(huán)1000次,就是20w的數(shù)據(jù)量,肯定夠了
            //處理數(shù)據(jù)
            judgeSameTask(dOList);
            if (200 > dOList.size()) {
                break;
            }
            page++;
            dOList = query(request, page);
        }
    }
  • eg2
private List<Info> batchQuery(Request request) {
        List<Info> result = new ArrayList<>();
        int page = 1;
        List<Info> infos = query(request, page);
        while (CollectionUtils.isNotEmpty(infos) && page <= 1000) {//一次200,循環(huán)1000次,就是20w的數(shù)據(jù)量,肯定夠了
            result.addAll(infos);
            if (200 > infos.size()) {
                break;
            }
            page++;
            infos = query(request, page);
        }
        return totalSkuStockList;
    }


private List<ReturnPlanTaskDO> query(Request request, int page) {

        //01.構(gòu)建查詢條件
        XxxDOExample example = buildDOExample();

        //02.分頁參數(shù)
        example.limit((page - 1) * 200, 200);

        //03.查詢
        return myService.query(example);
    }
  • eg3
    private List<Info> batchQuery(TRequest request) {
        List<Info> result = new ArrayList<>();
        int page = 1;
        List<Info> infoList = query(request, page);
        while (CollectionUtils.isNotEmpty(infoList) && page <= 1000) {//一次200,循環(huán)1000次,就是20w的數(shù)據(jù)量,肯定夠了
            result.addAll(infoList);
            if (200 > skuStockSaleInfos.size()) {
                break;
            }
            page++;
            infoList = query(request, page);
        }
        return result;
    }

    private List<Info> query(TRequest request, int page) {
        //01.構(gòu)建查詢條件
        Paging paging = new Paging();
        paging.setOffset((page - 1) * 200);
        paging.setLimit(200);
        request.setPaging(paging);

        //02.查詢
        TResponse response = skuService.query(request);
        if (response != null && response.getCode() == 0) {
            return response.getInfoList();
        } else {
            return Collections.emptyList();
        }
    }
  • eg4
List<DO> result = Lists.newArrayList();
boolean loop = true;
long id = 0L;
do {
    XxxDOExample example = new XxxDOExample();
    example.limit(200);
    example.setOrderByClause("id asc");
    XxxDOExample.Criteria criteria = example.createCriteria();
    criteria1.andValidEqualTo(Boolean.TRUE);
    criteria1.andIdGreaterThan(id);
    List<DO> selectByExample = myMapper.selectByExample(example);
    if (CollectionUtils.isNotEmpty(selectByExample)) {
    result.addAll(selectByExample);
    int size = selectByExample.size();
    if (size < 200) {
        loop = false;
    } else {
        id = selectByExample.get(size - 1).getId();
    }
} while (loop);

第一次查詢0-100,數(shù)據(jù)。(過濾或者處理一下這100條數(shù)據(jù))后,存入list中,fetchCount = 100,

第二次查詢100-200。(過濾或者處理一下這100條數(shù)據(jù))后,存入list中,fetchCount = 200,

···

直到第10次處理完,fetchCount == total(1000)了,needFalse = false,停止查詢

補(bǔ)充:為什么采用這種,每次查詢100條,(處理或不處理)存入list,直到全部1000條都(處理或不處理)存入list。而不是直接一次查詢出這1000條數(shù)據(jù)

解:因?yàn)槿绻悴徊樵円淮?,你根本就不知道?shù)據(jù)庫中有1000條滿足條件的數(shù)據(jù)。所以,你也可以先查詢一次limit offset(0-1)查出total = 1000,此時(shí)你再執(zhí)行sql查詢page(0-1000)一次全部查出來放入list

limit 20000 , 10:從第20001行數(shù)據(jù)開始查找,查找10條(20001、20002、····200010)=》 where id 〉 20000 limit 0 ,10。PageModel即父類RowBounds(mysql中的)即這種形式limit、offset

limit 10 offset 3 :(從第4行開始查找,找10條數(shù)據(jù)),即4、5、6、···13。

<if test="rows != null">
      <if test="offset != null">
        limit ${offset}, ${rows}    偏移量、多少條
      </if>
      <if test="offset == null">
        limit ${rows}
      </if>
    </if>
    這里limit ${offset}, ${rows}   對(duì)比 limit 20000 , 10
    即offset是偏移量,從第20001開始查詢,查10條。 這里是limit 0,1000 從第一條開始查查詢1000條

  • eg5
return Lists.partition(skuIds, 200).stream().map(skus -> {
	XxxDOExample example = new XxxDOExample();
example.createCriteria().andSkuIdIn(skus)
                    .andValidEqualTo(Boolean.TRUE);
            return example;
        }).map(example -> myMapper.selectByExample(example))
                .reduce((list1, list2) -> {
                    list1.addAll(list2);
                    return list1;
         }).orElse(Lists.newArrayList());

3、分頁查詢注意事項(xiàng)

只要使用分頁查詢,必須加上order by

1、原因

不使用order by,分頁查詢的數(shù)據(jù)不準(zhǔn)確

  • 背景:

    select查詢,如果不走二級(jí)索引查詢,查詢結(jié)果默認(rèn)是按照主鍵id,正序排序;

    如果走了二級(jí)索引,則結(jié)果默認(rèn)按二級(jí)索引排序展示

  • 問題復(fù)現(xiàn)

    select limit 0,5,使用了二級(jí)索引A進(jìn)行查詢,則結(jié)果按照索引A正序排序,為:7,8,9,1,2;

    又進(jìn)行了select 5,10查詢第二頁;

    此時(shí),因?yàn)閿?shù)據(jù)庫原因(主從切換,原本該走從查詢的,現(xiàn)在走主查詢了),或數(shù)據(jù)量變化(原本數(shù)據(jù)量級(jí)該走A索引查詢的,現(xiàn)在走B索引查詢了)

    select limit 5,5,使用了二級(jí)索引B進(jìn)行查詢,則結(jié)果按照索引B正序排序,為:11,12,13,14,2;導(dǎo)致id = 2的數(shù)據(jù),在第一頁 和 第二頁分頁查詢結(jié)果中都出現(xiàn)了?。?!甚至?xí)?dǎo)致數(shù)據(jù)丟失

2、解:

分頁查詢一定使用order by

3、SOP

3.1 分頁查詢?nèi)繑?shù)據(jù)(200、200、200 —)

  • 無腦order by id asc即可

  • 原因:

    此時(shí)如果order by 字段a,會(huì)有以下問題

    • 字段a,不是聯(lián)合索引一員,導(dǎo)致走不到索引

    • 字段a,是聯(lián)合索引一員,但是,中間斷了x_y_z_a,但是本次查詢條件僅有x_y ,order by a,也會(huì)使索引失效

    • 字段a,是聯(lián)合索引一員,且連續(xù),能走到索引,但是order by a字段,a字段有很多相同的數(shù)據(jù)。比如a字段為倉id

      select order by a ,limit 0, 5 ,結(jié)果為7,8,9,1,2

? select order by a ,limit 5, 5 ,結(jié)果為2,11,12,13,14

? 原因就是a字段有很多相同的數(shù)據(jù),order by a,前后兩頁也有可能有相同數(shù)據(jù)

? 比如聯(lián)合索引為valid_poiId,select * from table where valid = 1 limit 0,200這個(gè)時(shí)候查出來的數(shù)據(jù)都是valid = 1的,因此查詢結(jié)果會(huì)按照聯(lián)合索引中的第二個(gè)字段poiId正序排序的?。?!

即生效sql實(shí)際上為select * from table where valid = 1 order by poiId asc limit 0,200

問題:當(dāng)poi_id有序增長時(shí),id的增長并不有序,甚至可能跨度很大?。?!,導(dǎo)致翻頁時(shí),如果使用了granThanId方式,取最后一條數(shù)據(jù)的id可能跳躍很大,導(dǎo)致漏數(shù)據(jù)。

復(fù)現(xiàn):

查詢結(jié)果 poiId id

? 1 10009577 777

? 2 10001014 77777777

這樣即使查詢出來的兩條數(shù)據(jù)按poiId排序挨在一起,但是id卻跨度很大很大。上一次granthanId的id為776,不會(huì)丟數(shù)據(jù)。這一次granThanid的id為77777777,id > 77777777,這樣777- 77777777中間很多id的數(shù)據(jù)都沒查出來!??!相當(dāng)于丟數(shù)據(jù)了

所以,此時(shí)必須添加一個(gè)能確定順序的索引,即order by a asc,id asc 。不如,直接order by id

3.2 分頁查詢?nèi)繑?shù)據(jù),建議使用greathanId

3.3 如果是頁面分頁查詢某一頁的數(shù)據(jù),而且需要字段a排序展示,則order by a asc,id asc文章來源地址http://www.zghlxwxcb.cn/news/detail-731497.html

  • 原因:如果直接order by id,則查詢出來的幾條數(shù)據(jù),不是按a字段排序的,可能不符合要求(a字段為銷量,order by id查詢出來的幾條數(shù)據(jù),銷量可能不是最高的前幾條)
example.setOrderByClause("poi_id asc, create_at asc");

到了這里,關(guān)于批量循環(huán)查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • scss語法,使用for循環(huán)批量設(shè)置class類

    scss語法,使用for循環(huán)批量設(shè)置class類

    現(xiàn)在我們寫項(xiàng)目一般都是用scss寫css,相關(guān)知識(shí)可以參考這篇文章。 scss中可以使用for循環(huán)批量設(shè)置具有相同規(guī)則的類,設(shè)計(jì)圖中經(jīng)常有不同透明度的顏色,如下: 我們就可以把不同透明度的顏色都設(shè)置成一個(gè)class,當(dāng)然可以一個(gè)一個(gè)寫,但是就很麻煩,所以我們可以使用scs

    2024年02月14日
    瀏覽(17)
  • DB SQL 轉(zhuǎn) ES DSL(支持多種數(shù)據(jù)庫常用查詢、統(tǒng)計(jì)、平均值、最大值、最小值、求和語法)...

    DB SQL 轉(zhuǎn) ES DSL(支持多種數(shù)據(jù)庫常用查詢、統(tǒng)計(jì)、平均值、最大值、最小值、求和語法)...

    1. 簡介 ??日常開發(fā)中需要查詢 Elasticsearch 中的數(shù)據(jù)時(shí),一般會(huì)采用 RestHighLevelClient 高級(jí)客戶端封裝的API。項(xiàng)目中一般采用一種或多種關(guān)系型數(shù)據(jù)庫(如: Mysql 、 PostgreSQL 、 Oracle 等) + NoSQL(如: Elasticsearch )存儲(chǔ)方案;不同關(guān)系數(shù)據(jù)庫可以采用 Mybatis-Plus 方案屏蔽數(shù)據(jù)庫的方言

    2024年01月17日
    瀏覽(22)
  • 在Azure SQL DB/Azure托管實(shí)例里快速查詢各數(shù)據(jù)庫大小以及每個(gè)數(shù)據(jù)庫下表的大小

    在Azure SQL DB/Azure托管實(shí)例里快速查詢各數(shù)據(jù)庫大小以及每個(gè)數(shù)據(jù)庫下表的大小

    目錄 (一)前言 (二)正文 1. 環(huán)境: 2. 查看實(shí)例下每個(gè)數(shù)據(jù)庫的空間大小 (1) SQL語法 (2)運(yùn)行結(jié)果 3. 查看特定數(shù)據(jù)庫下每張表的大小 (1)SQL語法 (2)運(yùn)行結(jié)果 日常工作中對(duì)于各個(gè)數(shù)據(jù)庫以及每一個(gè)數(shù)據(jù)庫中下轄的表的大小,是我們?nèi)粘1O(jiān)控以及分析問題的重要方向

    2024年02月11日
    瀏覽(39)
  • springboot+es批量新增、批量修改、根據(jù)內(nèi)部id批量查詢

    pom.xml配置 yml配置 EsConfig配置 ElasticSearchConfig 配置 啟動(dòng)類配置 //批量操作的對(duì)象 批量修改 批量新增 根據(jù)es內(nèi)部id批量查詢數(shù)據(jù)

    2024年02月11日
    瀏覽(31)
  • 域名批量查詢功能常用查詢方法教程

    域名批量查詢功能常用查詢方法教程

    一些用戶在抱怨,要找到好域名怎么就那么不容易呢,能不能讓我批量查下不含0的數(shù)字啊,能不能查下不含4的數(shù)字啊,能不能查下AABBB這樣的域名啊…… 別著急,這就給您支招啦:通過西部數(shù)碼強(qiáng)大的批量查詢功能,您想要的米,統(tǒng)統(tǒng)都能查到。接下來就回答下大家長遇到

    2023年04月11日
    瀏覽(18)
  • ElasticSearch中批量操作(批量查詢_mget、批量插入刪除_bulk)

    ElasticSearch中批量操作(批量查詢_mget、批量插入刪除_bulk)

    有時(shí)候可以通過批量操作來減少網(wǎng)絡(luò)請(qǐng)求。如:批量查詢、批量插入數(shù)據(jù)。 當(dāng)某一條數(shù)據(jù)不存在,不影響整體響應(yīng),需要通過found的值進(jìn)行判斷是否查詢到數(shù)據(jù)。? ????????在Elasticsearch中,支持批量的插入、修改、刪除操作,都是通過_bulk的api完成的。 請(qǐng)求格式如下:(

    2024年02月12日
    瀏覽(32)
  • WordPress主題開發(fā) — 模版循環(huán)(條件判斷、多個(gè)循環(huán)、新建查詢和文章循環(huán))

    ????????循環(huán)是 WordPress 通過主題模板文件輸出文章的默認(rèn)機(jī)制?。在循環(huán)中,WordPress 遍歷當(dāng)前頁面獲取到的所有文章,然后使用主題中的模版標(biāo)簽將其格式化并輸出。 我們可以用 WordPress 循環(huán)來做很多事情,例如: 在網(wǎng)站首頁顯示多個(gè)文章模塊 在文章詳情頁面顯示內(nèi)容

    2024年02月13日
    瀏覽(26)
  • 站長工具seo綜合查詢-批量查詢域名掃描域名查詢收錄排名蜘蛛

    站長工具seo綜合查詢-批量查詢域名掃描域名查詢收錄排名蜘蛛

    站長工具seo綜合查詢,什么是站長工具SEO查詢?就是包含了站長平時(shí)用的所有功能,今天給大家分析一款全能的站長工具SEO綜合查詢包: 批量排名查詢-批量網(wǎng)站收錄查詢-批量挖掘-批量文章采集-批量文章偽原創(chuàng)-批量文章發(fā)布到各大網(wǎng)站-主動(dòng)推送搜索引擎收錄

    2024年02月08日
    瀏覽(29)
  • elasticsearch批量刪除(查詢刪除)

    注:delete by query只適用于低于elasticsearch2.0的版本(不包含2.0)。有兩種形式: 1.無請(qǐng)求體 curl -XDELETE \\\'localhost:9200/twitter/tweet/_query?q=user:kimchy\\\' 2.有請(qǐng)求體 使用請(qǐng)求體的時(shí)候,請(qǐng)求體中只能使用query查詢,不能使用filter curl -XDELETE \\\'localhost:9200/twitter/tweet/_query\\\' -d \\\'{ \\\"query\\\":{ \\\"term\\\":{\\\"user\\\":\\\"

    2024年02月10日
    瀏覽(23)
  • ElasticSearch 批量查詢

    ElasticSearch 批量查詢

    一、背景: 最近部門業(yè)務(wù)調(diào)整,開始寫一些后端接口,初次接觸項(xiàng)目時(shí),了解項(xiàng)目后端語音使用的Python,數(shù)據(jù)庫使用的是es。 二、需求: 因?yàn)槭莿偨佑|這個(gè)項(xiàng)目,領(lǐng)導(dǎo)分了一個(gè)比較簡單的需求讓熟悉下項(xiàng)目,大致內(nèi)容就是寫一個(gè)批量查詢的API,根據(jù)前端傳過來的Id和Name列表,批

    2024年02月16日
    瀏覽(10)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包