摘要:因為是高操作,所以線程池大小最好為數(shù)量的倍。柔性判斷,如果插入延遲過高,或者插入數(shù)據(jù)庫線程過多,都會引起系統(tǒng)異常。
一 業(yè)務(wù)場景
公司年終要辦一個搶購活動,搶購活動維護有一份名單(txt文件),只有名單中的用戶可以參加搶購活動,所以需要把名單導(dǎo)入到內(nèi)存數(shù)據(jù)庫中,以便于檢驗用戶是否有資格。
原先的設(shè)計分為兩步,第一步先把文件導(dǎo)入到數(shù)據(jù)庫中,而后第二步操作將數(shù)據(jù)庫中的數(shù)據(jù)同步到redis中。
二 存在問題當數(shù)據(jù)n百萬的時候是能夠滿足需求的,但是當這個白名單數(shù)量到達n千萬的時候,第二步基本就無法操作了,從數(shù)據(jù)庫中同步到redis,即使分頁每次都要一個全表掃描(因為沒做索引,而且即使有索引也只能有限的提高),速度非常慢,要1-2小時。
三 解決方案在第一步同步到數(shù)據(jù)庫中時,需要對每一行的txt進行掃描,進行一些業(yè)務(wù)處理,然后存入白名單數(shù)據(jù)表,而這一步的時候完全就可以存入redis了,所以刪除第二步,在入庫的同時存入到redis即可。將時間減少了1-2小時
四 優(yōu)化后來細思下,數(shù)據(jù)為何要存到數(shù)據(jù)庫中?存到數(shù)據(jù)庫中是為了什么呢?難道是為了校驗?1500W數(shù)據(jù)你要校驗到什么時候,而且假設(shè)存到數(shù)據(jù)庫丟數(shù)據(jù)了,哪又如何來校驗?zāi)兀克裕詈玫姆椒ㄊ侵苯佑梦募鎯Α?/p>
文件存儲有個問題是還需要掛載另外一個文件盤,帶來系統(tǒng)運維的復(fù)雜性。那么,干脆直接用源文件,直接做插入即可。
五 分塊插入首先將文件進行分塊,將分塊后的文件發(fā)送到各個微服務(wù)。文件上傳時會直接讀到內(nèi)存,如果虛擬機的分配的內(nèi)存不夠,服務(wù)會崩潰掉,所以如果1500w文件直接上傳,要么將java虛擬機空間設(shè)置的足夠大,要么在前端就進行分片。
每個微服務(wù)再分線程進行處理。因為是高IO操作,所以線程池大小最好為CPU數(shù)量的2倍。
柔性判斷,如果插入redis延遲過高,或者插入數(shù)據(jù)庫線程過多,都會引起系統(tǒng)異常。這里可以用Guava的retry包來判斷線程的返回值,如果返回值是延遲過高或者線程過多,均啥都不做,直接返回,否則進行redis或者數(shù)據(jù)庫操作。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/71151.html
摘要:月日,正式發(fā)布版。性能方面重點優(yōu)化了負載均衡調(diào)度策略和流程。另外的速度也得到顯著的提升。于年月在創(chuàng)建,同年月發(fā)布版本,而后于年月發(fā)布版,月發(fā)布版,并在年月發(fā)布版。 6 月 16 日,TiDB 正式發(fā)布 RC3 版。該版本對 MySQL 兼容性、SQL 優(yōu)化器、系統(tǒng)穩(wěn)定性、性能做了大量的工作。性能方面重點優(yōu)化了負載均衡調(diào)度策略和流程。功能方面進一步完善權(quán)限管理功能,用戶可以按照 MyS...
摘要:特點有聚合運算相關(guān)算法,時序數(shù)據(jù)庫相對于關(guān)系型數(shù)據(jù)庫沒有特別復(fù)雜的查詢,最常見的使用類型是寬表使用,在此基礎(chǔ)上做一些聚合算法插值查詢。 首先簡單介紹一下網(wǎng)易杭州研究院情況簡介,如下圖所示: showImg(https://segmentfault.com/img/bVbni6K?w=720&h=285); 我們公司主要從事平臺技術(shù)開發(fā)和建設(shè)方面,工作的重點方向主要在解決用戶在數(shù)據(jù)治理中...
閱讀 1865·2023-04-25 14:28
閱讀 1901·2021-11-19 09:40
閱讀 2803·2021-11-17 09:33
閱讀 1391·2021-11-02 14:48
閱讀 1716·2019-08-29 16:36
閱讀 3340·2019-08-29 16:09
閱讀 2923·2019-08-29 14:17
閱讀 2388·2019-08-29 14:07