掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
從理論上分析,性能優(yōu)化手段通常有

之前在sql IN一文中分析過,IN 的數(shù)量太多時,性能會下降。同樣服務(wù)間調(diào)用,數(shù)據(jù)量過大,帶寬占用大。所以這時候需要分批調(diào)用。
Listres= Lists.partition(ids, 200).parallelStream()
.flatMap(batch -> mServiceA.batchGetA(batch).stream())
.collect(Collectors.toList());
比如接口中需要請求多個外部接口/數(shù)據(jù)庫,相互之間無依賴,因?yàn)檫@種操作都是IO操作,可以由順序執(zhí)行改為并行執(zhí)行,充分利用cpu處理能力,如
CompletableFuturea = CompletableFuture.supplyAsync(() -> mServiceA.getA());
CompletableFutureb = CompletableFuture.supplyAsync(() -> mServiceB.getB());
CompletableFuture.allOf(a,b).join();
異步,分為讀寫。比如寫是弱依賴,可以用 @Async 或者其他操作。
如果是讀,不是必須的數(shù)據(jù),也需要加上超時處理,因?yàn)橥獠空{(diào)用有網(wǎng)絡(luò)原因,都是不可靠的
CompletableFuturea = CompletableFuture.supplyAsync(() -> mServiceA.getA());
CompletableFutureb = CompletableFuture.supplyAsync(() -> mServiceB.getB());
try {
CompletableFuture.allOf(a, b).get(1000, TimeUnit.MILLISECONDS);
} catch (Exception ex) {
if (!a.isDone()) {
}
if (!b.isDone()) {
}
}
eg. 拉取外部數(shù)據(jù),全量的循環(huán)去拉,增量的使用事件通知機(jī)制,這樣可以減少數(shù)據(jù)處理量
數(shù)據(jù)庫的深度分頁性能比較差,需要在業(yè)務(wù)上避免深度分頁
緩存本質(zhì)上就是從讀取速度快的設(shè)備中直接獲取數(shù)據(jù)。通過空間來換時間。對于DB中的數(shù)據(jù)可以緩存,對于外部服務(wù)的數(shù)據(jù)同樣可以緩存
使用多級緩存,可以最大限度提升性能。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流