免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      分組并發(fā)批量搞定查詢高性能

      前言

      針對數(shù)據(jù)庫的查詢操作,使用批量方式自然是要快速不少,本文則介紹關(guān)于批量的API實現(xiàn)。本共實現(xiàn)兩類API實現(xiàn),一類是串行的分組并發(fā),一類是并行的分組并發(fā)。

      • 利用Lists.partition分組
      • CompletableFuture.supplyAsync多線程并發(fā)

      串行的分組并發(fā)

      public List queryInCondition(String key, Object… value) { long current = System.currentTimeMillis(); Objects.requireNonNull(key, “Filter key cant be null.”); if (value == null || value.length == 0) { LOG.warn(“Return empty data, cause query by key:{},but value is empty”, key); return Collections.emptyList(); } List result = Lists.newArrayListWithCapacity(value.length); if (value.length MAX_PARTITION_DATA_COUNT ? MAX_PARTITION_DATA_COUNT : value.length / MIN_PARTITION; List valuePartition = Lists.partition(Lists.newArrayList(value), SPLIT); for (List values : valuePartition) { result.addAll(queryByKeyValues(currentSession(), key, values)); } } final long cost = System.currentTimeMillis() – current; LOG.debug(“QIC with key:{},Data Count:{}, Speed:{}/s, Time Cost:{} ms”, key, result.size(), result.size() * 1000 / cost, cost); return result; }

      并行的分組并發(fā)

      public List queryInConditionHighSpeed(String key, Object… value) { long current = System.currentTimeMillis(); Objects.requireNonNull(key, “Filter key cant be null.”); if (value == null || value.length == 0) { LOG.warn(“Return empty data, cause query by key:{},but value is empty”, key); return Collections.emptyList(); } if (value.length { List resultList = Collections.emptyList(); Session session = null; try { session = sessionFactory.openSession(); resultList = queryByKeyValues(session, key, values); } finally { if (session != null && session.isOpen()) session.close(); } return resultList; }); final long cost = System.currentTimeMillis() – current; LOG.debug(“QICH with key:{},Data Count:{}, Speed:{}, Time Cost:{} ms”, key, result.size(), result.size() * 1000 / cost, cost); return result; }

      輔助hibernate過濾查詢方法

      private List queryByKeyValues(Session session, String key, List values) { CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder(); CriteriaQuery query = criteriaBuilder.createQuery(getEntityClass()); Root root = query.from(getEntityClass()); query.select(root); CriteriaBuilder.In in = criteriaBuilder.in(root.get(key)); values.forEach(in::value); query.where(in); final Query queryExe = session.createQuery(query); LOG.trace(“Hibernate execute SQL:{}”, queryExe.getQueryString()); List resultList = queryExe.getResultList(); return resultList; }

      ConcurrencyUtil輔助類

      自定義并發(fā)輔助類

      import com.google.common.collect.Lists;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.List;import java.util.Objects;import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutorService;import java.util.concurrent.Future;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;import java.util.function.Function;import static java.util.stream.Collectors.toList;public class ConcurrencyUtil { private static final Logger LOG = LoggerFactory.getLogger(ConcurrencyUtil.class); private static final int MAX_PARTITION_SIZE = 2000; /** * 提供大數(shù)據(jù)進行分組并發(fā)處理能力 * * @param executorService 并發(fā)執(zhí)行線程池 * @param data 待處理數(shù)據(jù) * @param function 針對分組后的每組數(shù)據(jù)的處理邏輯 * @param 數(shù)據(jù)類型 * @param 返回數(shù)據(jù)類型 * @return */ public static List groupInvoke(ExecutorService executorService, List data, Function function) { int threadCount = getPoolSize(executorService); int i = (data.size() + threadCount) / threadCount; List partition = Lists.partition(data, i > MAX_PARTITION_SIZE ? MAX_PARTITION_SIZE : i); final List<CompletableFuture> futures = partition.stream().map(p -> CompletableFuture.supplyAsync(() -> function.apply(p) , executorService)).collect(toList()); List result = futures.stream().map(p -> { try { return p.get(5, TimeUnit.MINUTES); } catch (Exception e) { LOG.error(“Concurrency groupInvoke error.”, e); } return null; }).filter(Objects::nonNull).flatMap(List::stream).filter(Objects::nonNull).collect(toList()); return result; } public static List invoke(ExecutorService executorService, List data, Function function) { List futures = Lists.newArrayListWithCapacity(data.size()); for (T datum : data) { final Future future = executorService.submit(() -> function.apply(datum)); futures.add(future); } List result = Lists.newArrayListWithCapacity(data.size()); for (Future future : futures) { try { result.add(future.get(5, TimeUnit.MINUTES)); } catch (Exception e) { LOG.error(“Concurrency invoke error.”, e); } } return result.stream().filter(Objects::nonNull).collect(toList()); } private static int getPoolSize(ExecutorService executorService) { int threadCount = 10; if (executorService instanceof ThreadPoolExecutor) { threadCount = ((ThreadPoolExecutor) executorService).getCorePoolSize(); } return threadCount <= 0 ? 10 : threadCount; }}

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年6月21日 12:10
      下一篇 2022年6月21日 12:10

      相關(guān)推薦

      • 怎么轉(zhuǎn)行總結(jié)出成功轉(zhuǎn)行的3個步驟

        01 前段時間,由麥可思研究院發(fā)布的《就業(yè)藍皮書:2019年中國大學生就業(yè)報告》顯示,2018大學畢業(yè)生半年內(nèi)的離職率為33%,主動離職的主要原因是“個人發(fā)展空間不夠”和“薪資福利…

        2022年11月26日
      • 開個內(nèi)衣店利潤有多大(新手開內(nèi)衣店怎么開)

        想當老板的人,想去做一件事的人,想去提高能力的人,只要有了這個想法,他只要想行動,你攔都攔不住。 只不過說有些人會尋到正確的方法,不管是機緣巧合,還是漫無目的之后的巧遇,你不行動,…

        2022年11月26日
      • 個人怎么做抖音帶貨(個人做抖音帶貨能賺錢嗎)

        抖音如今是大家很熟悉的短視頻平臺,不過現(xiàn)在的抖音卻不只是短視頻那么簡單,它的功能非常豐富,其中一個就是可以帶貨,相信很多小伙伴都有在抖音上買過東西,抖音如今的變現(xiàn)能力也是不容小覷的…

        2022年11月25日
      • 英雄聯(lián)盟暗裔傳說11.24答案分享 暗裔傳說第四天答案攻略

        英雄聯(lián)盟手游能力者·叁-暗裔傳說第四天答案是什么?暗裔傳說11月24日是活動的第四天,今天的題目也更新了三個新問題,題目和答案小編已經(jīng)分享在下面,大家直接通過攻略就可以了解到暗裔傳…

        2022年11月25日
      • 什么是推廣cpa一篇文章帶你看懂CPA推廣渠道

        CPA渠道 CPA指的是按照指定的行為結(jié)算,可以是搜索,可以是注冊,可以是激活,可以是搜索下載激活,可以是綁卡,實名認證,可以是付費,可以是瀏覽等等。甲乙雙方可以根據(jù)自己的情況來定…

        2022年11月25日
      • 抖音直播帶貨有哪些方法技巧(抖音直播帶貨有哪些痛點)

        如今抖音這個短視頻的變現(xiàn)能力越來越突顯了,尤其是在平臺上開通直播,更具有超強的帶貨屬性,已經(jīng)有越來越多的普通人加入到其中了。不過直播帶貨雖然很火,但是也不是每個人都能做好的,那么在…

        2022年11月24日
      • 《寶可夢朱紫》攻擊努力值怎么刷?攻擊努力值速刷方法分享

        寶可夢朱紫很需要攻擊努力值,有很多玩家感覺攻擊努力值刷的太慢了,怎么才能快速刷,下面就給大家?guī)韺毧蓧糁熳瞎襞χ邓偎⒎椒ǚ窒?,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 攻…

        2022年11月24日
      • 英雄聯(lián)盟手游暗裔傳說11.24答案 LOL手游能力者·叁-暗裔傳說第四天答案

        英雄聯(lián)盟手游能力者·叁-暗裔傳說第四天答案是什么?暗裔傳說11月24日是活動的第四天,今天的題目也更新了三個新問題,題目和答案小編已經(jīng)分享在下面,大家直接通過攻略就可以了解到暗裔傳…

        2022年11月24日
      • 淘寶直播平臺抽成多少(淘寶直播平臺抽成比例)

        隨著時代的發(fā)展,現(xiàn)在直播帶貨已經(jīng)成為主要帶貨方式,其中淘寶是主流帶貨平臺,不少人在上面直播帶貨賺錢,一些小伙伴也想加入,那么淘寶直播平臺抽成多少?下面小編為大家?guī)硖詫氈辈テ脚_抽成…

        2022年11月24日
      • 淘寶直播開通后帶貨鏈接怎么做(淘寶直播需要開通淘寶店鋪嗎)

        直播帶貨無論是對于商家來說還是主播收益都是非??捎^的,所以不少平臺都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開通后帶貨鏈接怎么做?下面小編為大家?guī)硖詫氈辈ラ_通后帶…

        2022年11月24日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時間:周一至周五,10:30-18:30,節(jié)假日休息