新聞中心
隨著物聯(lián)網(wǎng)、云計(jì)算、大數(shù)據(jù)等技術(shù)的發(fā)展,企業(yè)面臨的數(shù)據(jù)量越來越大,數(shù)據(jù)查詢的速度也越來越慢。而在很多場(chǎng)景下,如物流、生產(chǎn)等領(lǐng)域中,對(duì)于時(shí)間段查詢的需求非常常見。本文從cache技術(shù)入手,探討如何實(shí)現(xiàn)高效的時(shí)間段數(shù)據(jù)庫查詢。

創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端重慶網(wǎng)站建設(shè)公司、成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、網(wǎng)絡(luò)營銷推廣、小程序開發(fā)、微信公眾號(hào)開發(fā)、seo優(yōu)化排名服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計(jì)、程序開發(fā)來完成項(xiàng)目落地,為成都木屋企業(yè)提供源源不斷的流量和訂單咨詢。
一、cache技術(shù)介紹
cache(中文譯作“緩存”)是一種內(nèi)存高速緩存,可以在查詢數(shù)據(jù)時(shí)加速對(duì)數(shù)據(jù)的檢索。cache技術(shù)一般分為硬盤cache和內(nèi)存cache兩種,其中,內(nèi)存cache查詢速度更快,因?yàn)橄啾扔脖P而言,內(nèi)存的讀寫速度更快,而內(nèi)存cache的處理速度甚至可以達(dá)到納秒級(jí)別。
cache技術(shù)的原理很簡單:在內(nèi)存中開辟一塊空間,將一部分經(jīng)常被使用的數(shù)據(jù)存放進(jìn)去,當(dāng)下一次需要使用這些數(shù)據(jù)時(shí),可以直接從內(nèi)存cache中讀取。這樣就可以大大提高查詢效率,使得用戶感覺不到查詢的延遲時(shí)間。
目前,cache技術(shù)已經(jīng)廣泛應(yīng)用在各種場(chǎng)景下,例如瀏覽器中的緩存、手機(jī)APP中的緩存、數(shù)據(jù)庫中的緩存等。
二、時(shí)間段數(shù)據(jù)庫查詢
時(shí)間段數(shù)據(jù)庫查詢是指針對(duì)某個(gè)時(shí)間段內(nèi)的數(shù)據(jù)進(jìn)行查詢。例如在物流領(lǐng)域中,我們可能需要查詢某個(gè)時(shí)間段內(nèi)的快遞運(yùn)輸記錄,或者查詢某個(gè)時(shí)間段內(nèi)的倉庫存儲(chǔ)情況。在一些有廣告投放需求的平臺(tái)上,我們也可能需要查詢某個(gè)時(shí)間段內(nèi)的廣告投放情況。在以上這些場(chǎng)景下,時(shí)間段查詢是比較常見的查詢方式。
在一些小規(guī)模的數(shù)據(jù)庫中,時(shí)間段查詢并不會(huì)對(duì)查詢速度造成太大的影響。但是,當(dāng)數(shù)據(jù)量逐漸增大時(shí),如果不采用一些高效查詢的方法,時(shí)間段查詢很容易就會(huì)成為一種效率非常低下的操作。
三、基于cache技術(shù)的時(shí)間段查詢優(yōu)化
基于cache技術(shù)的時(shí)間段查詢優(yōu)化,主要是將查詢結(jié)果緩存進(jìn)內(nèi)存中,下一次查詢時(shí)可以通過cache直接獲取結(jié)果,而不需要再訪問數(shù)據(jù)庫。下文分為兩部分,分別介紹如何將時(shí)間段查詢結(jié)果緩存進(jìn)內(nèi)存cache中,并從存儲(chǔ)、清理、查詢?nèi)齻€(gè)方面詳細(xì)講解。
(一)結(jié)果存儲(chǔ)
– 存儲(chǔ)結(jié)構(gòu)
在緩存結(jié)果的時(shí)候,需要考慮存儲(chǔ)結(jié)構(gòu)的問題。以MySQL為例,我們可以用哈希表存儲(chǔ)查詢結(jié)果。如果查詢的結(jié)果集很大,我們可以考慮存儲(chǔ)結(jié)果ID而不是整個(gè)結(jié)果集,這樣可以節(jié)省內(nèi)存空間。
– 查詢條件
查詢條件可以主要包括兩部分:時(shí)間段和過濾條件。如果只有時(shí)間段沒有過濾條件,我們可以將開始時(shí)間作為哈希表的鍵,將得到的結(jié)果集作為哈希表的值。如果存在過濾條件,我們可以建立兩個(gè)哈希表,分別存儲(chǔ)符合條件的結(jié)果和不符合條件的結(jié)果。
– 結(jié)果存儲(chǔ)策略
緩存策略分為先進(jìn)先出(FIFO)、最近最少使用(LRU)、自然增長關(guān)鍵字(NK)、過期時(shí)間等,選擇何種策略需要根據(jù)具體情況來決定。我們可以選擇LRU策略,即將最近最少使用的結(jié)果淘汰出去。
(二)緩存清理
– 緩存過期
由于查詢結(jié)果會(huì)不斷更新,因此,需要設(shè)置緩存過期時(shí)間,當(dāng)緩存過期后,需要將其從緩存中清除,再重新查詢新的結(jié)果。
– 內(nèi)存限制
在使用cache技術(shù)的時(shí)候,內(nèi)存大小限制是一個(gè)非常關(guān)鍵的問題。如果緩存的結(jié)果集過大,可能會(huì)消耗過多的內(nèi)存空間,從而導(dǎo)致系統(tǒng)運(yùn)行緩慢。因此,需要設(shè)置一個(gè)合理的上限,當(dāng)達(dá)到這個(gè)上限時(shí),需要清理一些不常用的結(jié)果集。
(三)查詢優(yōu)化
– 單條記錄查詢
在使用cache技術(shù)的時(shí)候,單條記錄查詢往往比批量查詢更耗費(fèi)系統(tǒng)資源。因此,在進(jìn)行時(shí)間段查詢時(shí),我們應(yīng)該盡量避免單條記錄查詢。
– 批量查詢
批量查詢是一種高效的查詢方式,可以減少查詢次數(shù),降低查詢耗時(shí)。我們可以將多次查詢結(jié)果存放在一個(gè)包含多個(gè)結(jié)果集的哈希表中,便于快速查詢。
四、
采用基于cache技術(shù)的時(shí)間段查詢優(yōu)化,可以大幅提升數(shù)據(jù)查詢效率,從而使得數(shù)據(jù)查詢更加快捷、高效。在使用該技術(shù)的過程中,需要考慮內(nèi)存限制、查詢優(yōu)化以及緩存清理等問題,做好緩存策略,將數(shù)據(jù)緩存進(jìn)內(nèi)存,讓查詢更加高效。
相關(guān)問題拓展閱讀:
- 什么是Cache?作用是什么?
- java怎么將數(shù)據(jù)庫的數(shù)據(jù)做緩存,方便查找(java實(shí)現(xiàn)數(shù)據(jù)保存到數(shù)據(jù)庫)
- 數(shù)據(jù)庫緩存機(jī)制是什么緩存是如何作用數(shù)據(jù)庫
什么是Cache?作用是什么?
cache memory高速緩沖儲(chǔ)存器
Cache指的是緩存。
高速緩存
(英語:cache,/k??/ kash )簡稱緩存,原始意義是指訪問速度比一般
隨機(jī)存取存儲(chǔ)器
(RAM)快的一種RAM,通常它不像系統(tǒng)主存那樣使用DRAM技術(shù),而使用昂貴但較快速的SRAM技術(shù)。
提供“緩存”的目的是為了讓數(shù)據(jù)訪問的速度適應(yīng)CPU的處理速度,其基于的原理是內(nèi)存中“程序執(zhí)行與數(shù)據(jù)訪問的局域性行為”,即一定程序執(zhí)行時(shí)間和空間內(nèi),被訪問的代碼集中于一部分。
為了充分發(fā)揮緩存的作用,不僅依靠“暫存剛剛訪問過的數(shù)據(jù)”,還要使用硬件實(shí)現(xiàn)的指令預(yù)測(cè)與數(shù)據(jù)預(yù)取技術(shù)——盡可能把將要使用的數(shù)據(jù)預(yù)先從內(nèi)存中取到緩存里。
擴(kuò)展資料
緩存的特點(diǎn)
緩存是指可以進(jìn)行高速數(shù)據(jù)交換的存儲(chǔ)器,它先于內(nèi)存與CPU交換數(shù)據(jù),因此速率很快。L1 Cache(一級(jí)緩存)是CPU之一層高速緩存。
內(nèi)置的L1高速緩存的容量和結(jié)構(gòu)對(duì)CPU的性能影響較大,不過
高速緩沖存儲(chǔ)器
均由靜態(tài)RAM組成,結(jié)構(gòu)較復(fù)雜,在CPU管芯面積不能太大的情況下,L1級(jí)高速緩存的容量不可能做得太大。一般L1緩存的容量通常在32—256KB。
L2 Cache(二級(jí)緩存)是CPU的第二層高速緩存,分內(nèi)部和外部兩種芯片。內(nèi)部的芯片二級(jí)緩存運(yùn)行速率與主頻相同,而外部的二級(jí)緩存則只有主頻的一半。
L2高速緩存容量也會(huì)影響CPU的性能,原則是越大越好,普通臺(tái)式機(jī)CPU的L2緩存一般為128KB到2MB或者更高,筆記本、服務(wù)器和工作站上用CPU的L2高速緩存更高可達(dá)1MB-3MB。
緩存只是內(nèi)存中少部分?jǐn)?shù)據(jù)的復(fù)制品,所以CPU到緩存中尋找數(shù)據(jù)時(shí),也會(huì)出現(xiàn)找不到的情況(因?yàn)檫@些數(shù)據(jù)沒有從內(nèi)存復(fù)制到緩存中去),這時(shí)CPU還是會(huì)到內(nèi)存中去找數(shù)據(jù),這樣系統(tǒng)的速率就慢下來了,不過CPU會(huì)把這些數(shù)據(jù)復(fù)制到緩存中去,以便下一次不要再到內(nèi)存中去取。
隨著時(shí)間的變化,被訪問得最頻繁的數(shù)據(jù)不是一成不變的,也就是說,剛才還不頻繁的數(shù)據(jù),此時(shí)已經(jīng)需要被頻繁的訪問,剛才還是最頻繁的數(shù)據(jù),又不頻繁了,所以說緩存中的數(shù)據(jù)要經(jīng)常按照一定的算法來更換,這樣才能保證緩存中的數(shù)據(jù)是被訪問最頻繁的。
參考資料來源
百度百科-cache
cache是一個(gè)高速小容量的臨時(shí)存儲(chǔ)器,可以用高速的靜態(tài)存儲(chǔ)器芯片實(shí)現(xiàn),或者集成到CPU芯片內(nèi)部,存儲(chǔ)CPU最經(jīng)常訪問的指令或者操作數(shù)據(jù)。
Cache的作用:
Cache實(shí)際上是為了把由DRAM組成的大容量內(nèi)存儲(chǔ)器都看做是高速存儲(chǔ)器而設(shè)置的小容量局部存儲(chǔ)器,一般由高速SRAM構(gòu)成。這種局部存儲(chǔ)器是面向CPU的,引入它是為減小或消除CPU與內(nèi)存之間的速度差異對(duì)系統(tǒng)性能帶來的影響。
Cache
通常保存著一份內(nèi)存儲(chǔ)器中部分內(nèi)容的副本(拷貝),該內(nèi)容副本是最近曾被CPU使用過的數(shù)據(jù)和程序代碼。Cache的有效性是利用了程序?qū)Υ鎯?chǔ)器的訪問在時(shí)間上和空間上所具有的局部區(qū)域性,即對(duì)大多數(shù)程序來說,在某個(gè)時(shí)間片內(nèi)會(huì)集中重復(fù)地訪問某一個(gè)特定的區(qū)域。
如PUSH/POP指令的操作都是在棧頂順序執(zhí)行,變量會(huì)重復(fù)使用,以及子程序會(huì)反復(fù)調(diào)用等,就是這種局部區(qū)域性的實(shí)際例證。因此,如果針對(duì)某個(gè)特定的時(shí)間片,用連接在局部總線上的Cache代替低速大容量的內(nèi)存儲(chǔ)器,作為CPU集中重復(fù)訪問的區(qū)域,系統(tǒng)的性能就會(huì)明顯提高。
系統(tǒng)開機(jī)或復(fù)位時(shí),Cache
中無任何內(nèi)容。當(dāng)CPU送出一組地址去訪問內(nèi)存儲(chǔ)器時(shí),訪問的存儲(chǔ)器的內(nèi)容才被同時(shí)“拷貝”到Cache中。此后,每當(dāng)CPU訪問存儲(chǔ)器時(shí),Cache
控制器要檢查CPU送出的地址,判斷CPU要訪問的地址單元是否在Cache 中。
若在,稱為Cache
命中,CPU可用極快的速度對(duì)它進(jìn)行讀/寫操作;若不在,則稱為Cache未命中,這時(shí)就需要從內(nèi)存中訪問,并把與本次訪問相鄰近的存儲(chǔ)區(qū)內(nèi)容復(fù)制到
Cache 中。未命中時(shí)對(duì)內(nèi)存訪問可能比訪問無Cache
的內(nèi)存要插入更多的等待周期,反而會(huì)降低系統(tǒng)的效率。
而程序中的調(diào)用和跳轉(zhuǎn)等指令,會(huì)造成非區(qū)域性操作,則會(huì)使命中率降低。因此,提高命中率是Cache
設(shè)計(jì)的主要目標(biāo)。
擴(kuò)展資料:
Cache的工作原理
Cache的工作原理是基于程序訪問的局部性。
對(duì)大量典型程序運(yùn)行情況的分析結(jié)果表明,在一個(gè)較短的時(shí)間間隔內(nèi),由程序產(chǎn)生的地址往往集中在存儲(chǔ)器邏輯地址空間的很小范圍內(nèi)。指令地址的分布本來就是連續(xù)的,再加上循環(huán)程序段和子程序段要重復(fù)執(zhí)行多次。因此,對(duì)這些地址的訪問就自然地具有時(shí)間上集中分布的傾向。
數(shù)據(jù)分布的這種集中傾向不如指令明顯,但對(duì)數(shù)組的存儲(chǔ)和訪問以及工作單元的選擇都可以使存儲(chǔ)器地址相對(duì)集中。這種對(duì)局部范圍的存儲(chǔ)器地址頻繁訪問,而對(duì)此范圍以外的地址則訪問甚少的現(xiàn)象,就稱為程序訪問的局部性。
根據(jù)程序的局部性原理,可以在主存和CPU通用寄存器之間設(shè)置一個(gè)高速的容量相對(duì)較小的存儲(chǔ)器,把正在執(zhí)行的指令地址附近的一部分指令或數(shù)據(jù)從主存調(diào)入這個(gè)存儲(chǔ)器,供CPU在一段時(shí)間內(nèi)使用。
這對(duì)提高程序的運(yùn)行速度有很大的作用。這個(gè)介于主存和CPU之間的高速小容量存儲(chǔ)器稱作高速緩沖存儲(chǔ)器(Cache)。
系統(tǒng)正是依據(jù)此原理,不斷地將與當(dāng)前指令集相關(guān)聯(lián)的一個(gè)不太大的后繼指令集從內(nèi)存讀到Cache,然后再與CPU高速傳送,從而達(dá)到速度匹配。
CPU對(duì)存儲(chǔ)器進(jìn)行數(shù)據(jù)請(qǐng)求時(shí),通常先訪問Cache。由于局部性原理不能保證所請(qǐng)求的數(shù)據(jù)百分之百地在Cache中,這里便存在一個(gè)命中率。即CPU在任一時(shí)刻從Cache中可靠獲取數(shù)據(jù)的幾率。
命中率越高,正確獲取數(shù)據(jù)的可靠性就越大。一般來說,Cache的存儲(chǔ)容量比主存的容量小得多,但不能太小,太小會(huì)使命中率太低;也沒有必要過大,過大不僅會(huì)增加成本,而且當(dāng)容量超過一定值后,命中率隨容量的增加將不會(huì)有明顯地增長。
只要Cache的空間與主存空間在一定范圍內(nèi)保持適當(dāng)比例的映射關(guān)系,Cache的命中率還是相當(dāng)高的。
一般規(guī)定Cache與內(nèi)存的空間比為4:1000,即128kB
Cache可映射32MB內(nèi)存;256kB
Cache可映射64MB內(nèi)存。在這種情況下,命中率都在90%以上。至于沒有命中的數(shù)據(jù),CPU只好直接從內(nèi)存獲取。獲取的同時(shí),也把它拷進(jìn)Cache,以備下次訪問。
參考資料來源:
百度百科-CACHE存儲(chǔ)器
Cache(即高速緩沖存儲(chǔ)器(Cache Memory),是我們最常聽到的一個(gè)詞了。在老鳥們眼中,這個(gè)詞或許已沒有再談的必要,因?yàn)樗麄儗?duì)Cache從設(shè)計(jì)的必要性到工作原理、工作過程等等都已了如指掌了;而對(duì)菜鳥朋友們而言,這些未必就很清楚。那么,它們到底是指的什么呢?不用急,下面就請(qǐng)隨筆者一起來全面認(rèn)識(shí)Cache。
為什么要設(shè)計(jì)Cache
我們知道,電腦的內(nèi)存是以系統(tǒng)總線的時(shí)鐘頻率工作的,這個(gè)頻率通常也就是CPU的外頻(對(duì)于雷鳥、系列的處理器,由于在設(shè)計(jì)采用了DDR技術(shù),CPU工作的外頻為系統(tǒng)總線頻率的兩倍)。但是,CPU的工作頻率(主頻)是外頻與倍頻因子的乘積。這樣一來,內(nèi)存的工作頻率就遠(yuǎn)低于CPU的工作頻率了。這樣造成的直接結(jié)果是:CPU在執(zhí)行完一條指令后,常常需要“等待”一些時(shí)間才能再次訪問內(nèi)存,極大降了CPU工作效率。在這樣一種情況下,Cache就應(yīng)運(yùn)而生了!
java怎么將數(shù)據(jù)庫的數(shù)據(jù)做緩存,方便查找(java實(shí)現(xiàn)數(shù)據(jù)保存到數(shù)據(jù)庫)
你要實(shí)現(xiàn)的這個(gè)可能跟SpringMvc的關(guān)系不是很大。
你要達(dá)到的目的其實(shí)就是在jvm啟動(dòng)的時(shí)候把數(shù)據(jù)庫數(shù)據(jù)加載一份到內(nèi)存,一個(gè)靜態(tài)變量和一個(gè)靜態(tài)初始化塊就可以搞定你的問題,這兩者都是在類加載的時(shí)候初始化一次,像前面回答的一樣,你可以用一個(gè)HashMap搞定。稍微具體來說,一個(gè)靜態(tài)變量
publicstaticfinalMap
cache=newHashMap
()
static{
cache=請(qǐng)求數(shù)據(jù)庫操作
}
key你自己加,String還是int都行,value是你數(shù)據(jù)庫的結(jié)構(gòu),可以寫個(gè)實(shí)體。獲取的時(shí)候直接cache.get(key)就可以了。
java如何從數(shù)據(jù)庫讀取數(shù)據(jù)并寫入txt文件:
將數(shù)據(jù)查詢出來放在list中,然后寫入文件。
給你個(gè)寫入的類,查詢數(shù)據(jù)自己如果能搞定更好了。
FileWriterfileWriter=newFileWriter(“c:\Result.txt”);
inta=newint{11112,222,333,444,555,666};
for(inti=0;i
fileWriter.write(String.valueOf(a)””);
}
fileWriter.flush();
fileWriter.close();
數(shù)據(jù)庫緩存機(jī)制是什么緩存是如何作用數(shù)據(jù)庫
我們都知道MySQL的TableCache是表定義的緩存,江湖上流傳著各種對(duì)這個(gè)參數(shù)的調(diào)優(yōu)方法。
tablecache的作用,就是節(jié)約讀取表結(jié)構(gòu)文件的開銷。對(duì)于tablecache是否命中,其實(shí)tablecache是針對(duì)于線程的,每個(gè)線程有自己的緩存,只緩存本線程的表結(jié)構(gòu)定義。不過我們發(fā)現(xiàn),strace中沒有關(guān)于表結(jié)構(gòu)文件的open操作(只有stat操作,定位表結(jié)構(gòu)文件是否存在),也就是說tablecache不命中鬧亮罩,不一定需要讀取表結(jié)構(gòu)文件。這種感覺好像是:在不命中tablecache時(shí),命中了另外一個(gè)表結(jié)構(gòu)緩存。
運(yùn)維建議:
我們讀一下MySQL的文檔,關(guān)于table_open_cache的建議值公式:建議值=更大并發(fā)數(shù)*join語句涉及的表的最液鬧大個(gè)數(shù)。
通過實(shí)驗(yàn)我們鍵迅容易理解:table_cache是針對(duì)于線程的,所以需要更大并發(fā)數(shù)個(gè)緩存。另外,一個(gè)語句join涉及的表,需要同時(shí)在緩存中存在。所以最小的緩存大小,等于語句join涉及的表的更大個(gè)數(shù)。將這兩個(gè)數(shù)相乘,就得到了MySQL的建議值公式。
關(guān)于cache中查詢一段時(shí)間數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)公司提供專業(yè)的建站服務(wù),為您量身定制,歡迎來電(028-86922220)為您打造專屬于企業(yè)本身的網(wǎng)絡(luò)品牌形象。
成都創(chuàng)新互聯(lián)品牌官網(wǎng)提供專業(yè)的網(wǎng)站建設(shè)、設(shè)計(jì)、制作等服務(wù),是一家以網(wǎng)站建設(shè)為主要業(yè)務(wù)的公司,在網(wǎng)站建設(shè)、設(shè)計(jì)和制作領(lǐng)域具有豐富的經(jīng)驗(yàn)。
文章標(biāo)題:高效查詢:基于cache技術(shù)的數(shù)據(jù)庫時(shí)間段查詢(cache中查詢一段時(shí)間數(shù)據(jù)庫)
文章轉(zhuǎn)載:http://m.fisionsoft.com.cn/article/cdhsgei.html


咨詢
建站咨詢
