(1)內(nèi)存數(shù)據(jù)庫(kù)是把整個(gè)數(shù)據(jù)庫(kù)放到內(nèi)存中的嗎?
(2)數(shù)據(jù)都在內(nèi)存里面,那宕機(jī)或者斷電了,數(shù)據(jù)不是沒有了嗎?
(3)據(jù)在內(nèi)存是怎么存放的,還是按照頁(yè)的方式嗎,一行的大小有限制嗎?
(4)內(nèi)存數(shù)據(jù)庫(kù)號(hào)稱無鎖式設(shè)計(jì),SQL是如何處理并發(fā)沖突的呢?
相信這些疑問也是大家在思考內(nèi)存數(shù)據(jù)庫(kù)時(shí)經(jīng)常遇到的難題,下文將為大家一一揭開這些問題的面紗,如有不對(duì)之處,還請(qǐng)各位看官幫我指出。
一、內(nèi)存數(shù)據(jù)庫(kù)是如何存儲(chǔ)的,只放在內(nèi)存嗎?是把整個(gè)數(shù)據(jù)庫(kù)放在內(nèi)存嗎?
答案:不是。
sql server 2014提供了眾多激動(dòng)人心的新功能,但其中我想最讓人期待的特性之一就要算內(nèi)存數(shù)據(jù)庫(kù)了。去年我再西雅圖參加SQL PASS Summit 2012的開幕式時(shí),微軟就宣布了將在下一個(gè)SQL Server版本中附帶代號(hào)為Hekaton的內(nèi)存數(shù)據(jù)庫(kù)引擎?,F(xiàn)在隨著2014CTP1的到來,我們終于可以一窺其面貌。
內(nèi)存數(shù)據(jù)庫(kù)
在傳統(tǒng)的數(shù)據(jù)庫(kù)表中,由于磁盤的物理結(jié)構(gòu)限制,表和索引的結(jié)構(gòu)為B-Tree,這就使得該類索引在大并發(fā)的OLTP環(huán)境中顯得非常乏力,雖然有很多辦法來解決這類問題,比如說樂觀并發(fā)控制,應(yīng)用程序緩存,分布式等。但成本依然會(huì)略高。而隨著這些年硬件的發(fā)展,現(xiàn)在服務(wù)器擁有幾百G內(nèi)存并不罕見,此外由于NUMA架構(gòu)的成熟,也消除了多CPU訪問內(nèi)存的瓶頸問題,因此內(nèi)存數(shù)據(jù)庫(kù)得以出現(xiàn)。
內(nèi)存的學(xué)名叫做Random Access Memory(RAM),因此如其特性一樣,是隨機(jī)訪問的,因此對(duì)于內(nèi)存,對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)也會(huì)是Hash-Index,而并發(fā)的隔離方式也對(duì)應(yīng)的變成了MVCC,因此內(nèi)存數(shù)據(jù)庫(kù)可以在同樣的硬件資源下,Handle更多的并發(fā)和請(qǐng)求,并且不會(huì)被鎖阻塞,而SQL Server 2014集成了這個(gè)強(qiáng)大的功能,并不像Oracle的TimesTen需要額外付費(fèi),因此結(jié)合SSD AS Buffer Pool特性,所產(chǎn)生的效果將會(huì)非常值得期待。
SQL Server內(nèi)存數(shù)據(jù)庫(kù)的表現(xiàn)形式
在SQL Server的Hekaton引擎由兩部分組成:內(nèi)存優(yōu)化表和本地編譯存儲(chǔ)過程。雖然Hekaton集成進(jìn)了關(guān)系數(shù)據(jù)庫(kù)引擎,但訪問他們的方法對(duì)于客戶端是透明的,這也意味著從客戶端應(yīng)用程序的角度來看,并不會(huì)知道Hekaton引擎的存在。如圖1所示。

圖1.客戶端APP不會(huì)感知Hekaton引擎的存在
首先內(nèi)存優(yōu)化表完全不會(huì)再存在鎖的概念(雖然之前的版本有快照隔離這個(gè)樂觀并發(fā)控制的概念,但快照隔離仍然需要在修改數(shù)據(jù)的時(shí)候加鎖),此外內(nèi)存優(yōu)化表Hash-Index結(jié)構(gòu)使得隨機(jī)讀寫的速度大大提高,另外內(nèi)存優(yōu)化表可以設(shè)置為非持久內(nèi)存優(yōu)化表,從而也就沒有了日志(適合于ETL中間結(jié)果操作,但存在數(shù)據(jù)丟失的危險(xiǎn))
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注