在網(wǎng)絡(luò)技術(shù)和計(jì)算機(jī)技術(shù)廣泛普及的今天,數(shù)據(jù)庫(kù)已經(jīng)成為IT領(lǐng)域最重要的課題之一。所謂數(shù)據(jù)庫(kù),是指一種用于存儲(chǔ)數(shù)據(jù)的庫(kù)存,可以為IT開(kāi)發(fā)者訪(fǎng)問(wèn)數(shù)據(jù)提供極大的便利。目前很多管理系統(tǒng)基本都需要數(shù)據(jù)庫(kù)支持。內(nèi)存數(shù)據(jù)庫(kù)是指通過(guò)內(nèi)存實(shí)現(xiàn)數(shù)據(jù)訪(fǎng)問(wèn)的一種數(shù)據(jù)庫(kù)。與從磁盤(pán)讀取數(shù)據(jù)的數(shù)據(jù)庫(kù)相比,內(nèi)存數(shù)據(jù)庫(kù)可以大大提高讀取速度,減少數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的時(shí)間。
傳統(tǒng)數(shù)據(jù)庫(kù)是我們經(jīng)過(guò)嚴(yán)格定義后產(chǎn)生的關(guān)系數(shù)據(jù)庫(kù)。所謂關(guān)系,是指數(shù)據(jù)庫(kù)中各種實(shí)體和屬性之間的關(guān)系。比如我們建立學(xué)生和課程管理的數(shù)據(jù)庫(kù),肯定會(huì)涉及到學(xué)生、課程和老師。師生之間通常是多對(duì)多的關(guān)系,即一個(gè)老師可以教很多學(xué)生,一個(gè)學(xué)生可以上很多老師教的課,而教師和課程之間一般是一對(duì)多的關(guān)系。傳統(tǒng)數(shù)據(jù)庫(kù)一般都是這樣的關(guān)系。它通常適用于存儲(chǔ)穩(wěn)定和持久的數(shù)據(jù)。
而傳統(tǒng)的數(shù)據(jù)庫(kù)不方便限制數(shù)據(jù)處理的時(shí)間,會(huì)浪費(fèi)時(shí)間。但是在一些對(duì)時(shí)間有特殊要求的行業(yè),太慢的數(shù)據(jù)庫(kù)讀取速度會(huì)嚴(yán)重影響整個(gè)系統(tǒng)的運(yùn)行效率。如果我們將數(shù)據(jù)直接存儲(chǔ)在內(nèi)存中,將會(huì)節(jié)省大量的時(shí)間和執(zhí)行過(guò)程中產(chǎn)生的I/O。同時(shí)可以通過(guò)計(jì)算準(zhǔn)確反映系統(tǒng)對(duì)應(yīng)的工作時(shí)間和處理時(shí)間。這和傳統(tǒng)數(shù)據(jù)庫(kù)在處理機(jī)制上是不同的,也可以看做是工作時(shí)間上的不同。
另外,內(nèi)存數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)一般是相對(duì)于傳統(tǒng)數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)而言的,即內(nèi)存數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)一般具有較低的時(shí)效性。通常,在內(nèi)存數(shù)據(jù)庫(kù)中,每個(gè)數(shù)據(jù)都有一個(gè)生效時(shí)間和有效期。如果數(shù)據(jù)存儲(chǔ)時(shí)間或讀取時(shí)間超過(guò)這個(gè)有效時(shí)間,原來(lái)的數(shù)據(jù)就會(huì)失效,會(huì)產(chǎn)生新的數(shù)據(jù)進(jìn)行替換。這種特殊性決定了內(nèi)存數(shù)據(jù)庫(kù)只能在一些特殊的場(chǎng)合和特定的范圍內(nèi)使用。然而,在現(xiàn)實(shí)生活中,為了同時(shí)保證讀取的效率和數(shù)據(jù)的穩(wěn)定性,開(kāi)發(fā)人員往往將傳統(tǒng)數(shù)據(jù)庫(kù)與內(nèi)存數(shù)據(jù)庫(kù)相結(jié)合。
什么是數(shù)據(jù)庫(kù)?
主流的有FastDB,Memcached,Redis。
FastDB
1.FastDB不支持客戶(hù)端-服務(wù)器架構(gòu),所以所有使用FastDB的應(yīng)用必須運(yùn)行在同一臺(tái)主機(jī)上;
2.fastdb假設(shè)整個(gè)數(shù)據(jù)庫(kù)都存在于RAM中,并根據(jù)這個(gè)假設(shè)優(yōu)化查詢(xún)算法和接口。
3.fastdb沒(méi)有數(shù)據(jù)庫(kù)緩沖區(qū)管理的開(kāi)銷(xiāo),不需要在數(shù)據(jù)庫(kù)文件和緩沖池之間傳輸數(shù)據(jù)。
4.整個(gè)fastdb的搜索算法和結(jié)構(gòu)都是建立在假設(shè)所有數(shù)據(jù)都存在內(nèi)存中的基礎(chǔ)上的,所以數(shù)據(jù)交換的效率不會(huì)很高。
5.Fastdb支持事務(wù)、在線(xiàn)備份和系統(tǒng)崩潰后自動(dòng)恢復(fù)。
6.fastdb是一個(gè)面向應(yīng)用的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)表由應(yīng)用的類(lèi)信息構(gòu)成。
FastDB不支持Java API接口,這使得它不適合在這個(gè)應(yīng)用程序中使用FastDB。
Memcached
Memcached是一個(gè)基于鍵值的開(kāi)源緩存服務(wù)器系統(tǒng),主要用作數(shù)據(jù)庫(kù)的數(shù)據(jù)緩存,但不能完全稱(chēng)為數(shù)據(jù)庫(kù)。
Memcached API使用32位循環(huán)冗余校驗(yàn)(CRC-32)計(jì)算鍵值,然后將數(shù)據(jù)分布在不同的機(jī)器上。當(dāng)表滿(mǎn)時(shí),下一個(gè)新數(shù)據(jù)將被LRU機(jī)制替換。因?yàn)閙emcached通常只用作緩存系統(tǒng),所以使用memcached的應(yīng)用程序在回寫(xiě)較慢的系統(tǒng)(比如后端數(shù)據(jù)庫(kù))時(shí),需要額外的過(guò)程來(lái)更新memcached中的數(shù)據(jù)。
Memcached有多種語(yǔ)言的客戶(hù)端開(kāi)發(fā)包,包括:Perl、PHP、JAVA、C、Python、Ruby、C#。
雷迪斯
Redis是一個(gè)高性能的鍵值數(shù)據(jù)庫(kù)。redis的出現(xiàn)很大程度上彌補(bǔ)了memcached等keyvalue存儲(chǔ)的不足,在某些場(chǎng)合可以對(duì)關(guān)系數(shù)據(jù)庫(kù)起到很好的補(bǔ)充作用。它提供了C、Java、Python、Ruby、Erlang和PHP客戶(hù)端。
作為一種新型的數(shù)據(jù)庫(kù),內(nèi)存數(shù)據(jù)庫(kù)的研究實(shí)際上還沒(méi)有傳統(tǒng)數(shù)據(jù)庫(kù)成熟。如果要大規(guī)模使用,還需要一段時(shí)間的研究和探索。