必威电竞|足球世界杯竞猜平台

內(nèi)存數(shù)據(jù)庫
來源:互聯(lián)網(wǎng)

內(nèi)存數(shù)據(jù)庫是使用內(nèi)存作為常規(guī)數(shù)據(jù)存儲(chǔ)設(shè)備,將內(nèi)存作為工作數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)庫系統(tǒng)。數(shù)據(jù)的存儲(chǔ)和訪問算法以內(nèi)存訪問特性為基礎(chǔ),實(shí)現(xiàn)處理器對數(shù)據(jù)的直接訪問,在算法和代碼效率上高于磁盤數(shù)據(jù)庫。

內(nèi)存數(shù)據(jù)庫一般應(yīng)用于對實(shí)時(shí)響應(yīng)性要求較高的高端應(yīng)用領(lǐng)域,如電信、金融等領(lǐng)域的核心事務(wù)處理。內(nèi)存數(shù)據(jù)庫既可以作為獨(dú)立的高性能數(shù)據(jù)庫來處理核心業(yè)務(wù),也可以作為磁盤數(shù)據(jù)庫的高速緩存,加速磁盤數(shù)據(jù)庫中“熱”數(shù)據(jù)集的處理性能。將內(nèi)存數(shù)據(jù)庫運(yùn)行在大內(nèi)存、多級(jí)cache和多核硬件環(huán)境下,還可以有效解決計(jì)算密集型的聯(lián)機(jī)分析處理應(yīng)用的性能瓶頸。

簡介

定義:設(shè)有數(shù)據(jù)庫系統(tǒng)DBS,DB為DBS中的數(shù)據(jù)庫,DBM(t)為在時(shí)刻t,DB在內(nèi)存的數(shù)據(jù)集,DBM(t)屬于DB。TS為DBS中所有可能的事務(wù)構(gòu)成的集合。AT(t)為在時(shí)刻t處于活動(dòng)狀態(tài)的事務(wù)集,AT(t)屬于TS。Dt(T)為事務(wù)T在時(shí)刻t所操作的數(shù)據(jù)集,

Dt(T)屬于DB。若在任意時(shí)刻t,均有:

任意T屬于AT(t) Dt(T)屬于DBM(t)

成立,則稱DBS為一個(gè)內(nèi)存數(shù)據(jù)庫系統(tǒng),簡稱為MMDBS;DB為一個(gè)內(nèi)存數(shù)據(jù)庫,簡稱為MMDB。

常見的例子有MySQL的MEMORY存儲(chǔ)引擎、eXtremeDB、TT、FastDB、SQLite、Microsoft SQL Server Compact等。

技術(shù)特點(diǎn)

(1)采用復(fù)雜的數(shù)據(jù)模型表示數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)冗余小,易擴(kuò)充,實(shí)現(xiàn)了數(shù)據(jù)共享。

(2)具有較高的數(shù)據(jù)和程序獨(dú)立性,數(shù)據(jù)庫的獨(dú)立性有物理獨(dú)立性和邏輯獨(dú)立性。

(3)內(nèi)存數(shù)據(jù)庫為用戶提供了方便的用戶接口。

(4)內(nèi)存數(shù)據(jù)庫提供4個(gè)方面的數(shù)據(jù)控制功能,分別是并發(fā)控制、恢復(fù)、完整性和安全性。數(shù)據(jù)庫中各個(gè)應(yīng)用程序所使用的數(shù)據(jù)由數(shù)據(jù)庫統(tǒng)一規(guī)定,按照一定的數(shù)據(jù)模型組織和建立,由系統(tǒng)統(tǒng)一管理和集中控制。

(5)增加了系統(tǒng)的靈活性。

存儲(chǔ)問題

要解決持久性問題,內(nèi)存數(shù)據(jù)庫也有相應(yīng)的解決方案。這其中包括在集群里保存額外的數(shù)據(jù)副本,然后對數(shù)據(jù)庫進(jìn)行橫向擴(kuò)展,讓系統(tǒng)能夠在運(yùn)行中不斷將更新數(shù)據(jù)復(fù)制到一個(gè)或多個(gè)備用系統(tǒng)當(dāng)中。

一些數(shù)據(jù)庫系統(tǒng)還會(huì)定期將數(shù)據(jù)復(fù)制到磁盤系統(tǒng),就是為了應(yīng)對上述突然斷電或系統(tǒng)宕機(jī)的情況。當(dāng)然這時(shí)候就要在額外的負(fù)載和數(shù)據(jù)可恢復(fù)性方面做出權(quán)衡。

由于內(nèi)存數(shù)據(jù)庫的風(fēng)險(xiǎn)比傳統(tǒng)OLTP數(shù)據(jù)庫要大,所以要對它所支撐的應(yīng)用系統(tǒng)有一個(gè)更清楚的認(rèn)識(shí)。目前從整體來看,傳統(tǒng)的OLTP應(yīng)用系統(tǒng)往往會(huì)避免使用內(nèi)存數(shù)據(jù)庫技術(shù),它更多地應(yīng)用在特定的數(shù)據(jù)類型或者分析應(yīng)用(包括批處理報(bào)表系統(tǒng))當(dāng)中,這些系統(tǒng)的數(shù)據(jù)遠(yuǎn)沒有OLTP系統(tǒng)重要。

另一方面也是出于成本預(yù)算的考慮,DRAM相比于傳統(tǒng)磁盤甚至閃存來說都是更昂貴的。

關(guān)鍵技術(shù)

MMDB除了具有一般數(shù)據(jù)庫的特征外,又具有自己的特殊性質(zhì),其關(guān)鍵技術(shù)的實(shí)現(xiàn)具有特殊性。

MMDB關(guān)鍵技術(shù)有:⑴數(shù)據(jù)結(jié)構(gòu);⑵MMDB索引技術(shù);⑶查詢處理與優(yōu)化;⑷事務(wù)管理;⑸并發(fā)控制;⑹數(shù)據(jù)恢復(fù)。

MMDB不同于DRDB,DRDB技術(shù)在內(nèi)存數(shù)據(jù)庫中不再適用,要對這些關(guān)鍵技術(shù)進(jìn)行新的研究。

存儲(chǔ)性能要求

在許多的數(shù)據(jù)庫應(yīng)用系統(tǒng)中,尤其在電話程控交換領(lǐng)域,對數(shù)據(jù)的訪問性能有很高的要求。這類應(yīng)用一般都有很高的事務(wù)量,又要求有很低的事務(wù)響應(yīng)延遲,而且對數(shù)據(jù)庫的可靠性有很高的要求,例如一個(gè)電話交換的應(yīng)用,每秒鐘會(huì)對數(shù)據(jù)庫有數(shù)千個(gè)查詢或者更新請求,每個(gè)請求要求有低于50毫秒的響應(yīng)延遲,并且在一年中數(shù)據(jù)庫只能有數(shù)分鐘的停機(jī)時(shí)間。MMDB系統(tǒng)能夠滿足這些數(shù)據(jù)庫應(yīng)用的要求,但是這需要MMDB系統(tǒng)的各個(gè)部件在實(shí)現(xiàn)方式和策略上,為應(yīng)用做最大的優(yōu)化。

存儲(chǔ)方案

MMDB中的存儲(chǔ)模型比DRDB更加靈活。在傳統(tǒng)的MMDB中,為了考慮對內(nèi)存空間的利用,在系統(tǒng)中專門開辟一塊空間來存放記錄中各個(gè)屬性的值,同時(shí),將記錄中屬性值用指針來替換,指針實(shí)際指向存儲(chǔ)在堆中的屬性值。這種存儲(chǔ)方案,在使用初期確實(shí)節(jié)省了大量的內(nèi)存空間。尤其在記錄中有大量重復(fù)值的情況下。并且由于記錄中各個(gè)字段只存放4個(gè)字節(jié)長(32位環(huán)境下)的指針,因此記錄可以很好的支持變長記錄的存儲(chǔ),不需要再像DRDB系統(tǒng)中那樣,在記錄頭部存放偏移量來支持變長字段的存儲(chǔ)。但是這種存儲(chǔ)方案沒有很好的考慮到對處理器緩存的利用。通過指針間接訪問數(shù)據(jù),幾乎相當(dāng)于在內(nèi)存空間中的隨機(jī)訪問,嚴(yán)重影響了緩存的利用率。尤其在64位的計(jì)算環(huán)境不斷普及,內(nèi)存的容量理論上可以達(dá)到無限,同時(shí)內(nèi)存的價(jià)格在不斷下降,但是內(nèi)存的訪問速度仍然沒有達(dá)到處理器的速度的情況下。因此。在傳統(tǒng)MMDB系統(tǒng)中,這種利用指針來節(jié)省內(nèi)存空間,卻忽視緩存作用的存儲(chǔ)模式,在現(xiàn)在的應(yīng)用環(huán)境下,反而有點(diǎn)得不償失。

可以說,先進(jìn)的數(shù)據(jù)庫應(yīng)用程序越來越注重對內(nèi)存的訪問效率,高性能的數(shù)據(jù)庫系統(tǒng)因而必須最大限度的利用處理器緩存,將可能被用到的數(shù)據(jù)緩存在多層次的緩存中。數(shù)據(jù)放置的位置對于緩存的利用優(yōu)化尤其重要。選擇好的數(shù)據(jù)存放方案,改進(jìn)數(shù)據(jù)分布的空間局部性,能夠提高對緩存的利用率,提升性能。目前新的數(shù)據(jù)存儲(chǔ)方案的設(shè)計(jì)思路集中于對記錄內(nèi)部各個(gè)屬性值的存儲(chǔ)布局做調(diào)整,能夠按照需求訪問記錄中的部分屬性,從而消除不必要的內(nèi)存訪問所帶來的內(nèi)存延遲。因此,在本文中,提出一種在MMDB系統(tǒng)中使用的數(shù)據(jù)存儲(chǔ)方法。它仍然在記錄中存放實(shí)際的值,但是為緩存的利用做了優(yōu)化。

數(shù)據(jù)加載

電信的二次批價(jià)和實(shí)時(shí)累賬是計(jì)費(fèi)系統(tǒng)中的兩個(gè)必備功能。所謂二次批價(jià)是相對于一次批價(jià)來說的。一次批價(jià)是按照國家標(biāo)準(zhǔn)資費(fèi)來進(jìn)行價(jià)格計(jì)算,比如: 全球通每分鐘本地通話為0.4元,在一次批價(jià)完成后,會(huì)根據(jù)這個(gè)用戶的套餐進(jìn)行再一次的計(jì)算。以北京全球通用戶接聽4分鐘的電話為例,一次批價(jià)完成后,這條話單的價(jià)格是1.6元,如果這個(gè)用戶參加了10元包月接聽套餐,那么在二次批價(jià)后,這次通話的費(fèi)用就為0元。一次批價(jià)是用于各大運(yùn)營商之間結(jié)算的,而二次批價(jià)是針對用戶個(gè)人的。

實(shí)時(shí)累賬是將用戶從每月1號(hào)到目前為止的所有費(fèi)用累加起來,也就是用戶目前可以通過10086查到截止到前一天的實(shí)時(shí)話費(fèi)。累賬值可以幫助用戶控制高額話費(fèi)或是供用戶即時(shí)查詢消費(fèi)信息。

二次批價(jià)和實(shí)時(shí)累賬過程涉及用戶資料、用戶套餐等與用戶相關(guān)的信息,電信支撐系統(tǒng)在開始批價(jià)時(shí)必須加載這些數(shù)據(jù)。稍大一點(diǎn)的省級(jí)運(yùn)營商的這些數(shù)據(jù)就會(huì)超過1000萬條,計(jì)費(fèi)處理模型也由于套餐的組合、產(chǎn)品的組合以及不同的優(yōu)惠規(guī)則變得相當(dāng)復(fù)雜,加載這部分?jǐn)?shù)據(jù)對系統(tǒng)而言是一筆不小的開銷,這就使得現(xiàn)在的計(jì)費(fèi)處理速度比較慢,而且很難做到對數(shù)據(jù)的實(shí)時(shí)更新。內(nèi)存數(shù)據(jù)庫的引入在一定程度上解決了這個(gè)問題。

在計(jì)費(fèi)二次批價(jià)過程中數(shù)據(jù)量最大的是詳單數(shù)據(jù),這部分?jǐn)?shù)據(jù)不用放在內(nèi)存數(shù)據(jù)庫中,每處理完一個(gè)話單文件或達(dá)到設(shè)定的提交記錄數(shù)時(shí)直接操作磁盤數(shù)據(jù)庫,不會(huì)影響系統(tǒng)性能。最急切的是將用戶資料、套餐、營業(yè)套餐和計(jì)費(fèi)套餐對應(yīng)關(guān)系數(shù)據(jù)、計(jì)費(fèi)套餐模型數(shù)據(jù)及用戶累計(jì)數(shù)據(jù)放到內(nèi)存數(shù)據(jù)庫中,這部分?jǐn)?shù)據(jù)查詢操作遠(yuǎn)比數(shù)據(jù)新增和更新操作要頻繁。除了這些數(shù)據(jù)外,當(dāng)然還有應(yīng)用需要的其他數(shù)據(jù)也都可以加載到內(nèi)存數(shù)據(jù)庫。

在采用內(nèi)存數(shù)據(jù)庫后,用戶通過營業(yè)部或客戶查詢實(shí)時(shí)話費(fèi)的時(shí)候完全可以做到實(shí)時(shí),比目前只能提供查詢到前一天的實(shí)時(shí)話費(fèi)在業(yè)務(wù)上有了質(zhì)的飛躍。因?yàn)橄到y(tǒng)在處理這部分?jǐn)?shù)據(jù)時(shí)查詢流程和以前的完全一樣,但系統(tǒng)省去了以往內(nèi)存中的數(shù)據(jù)和磁盤數(shù)據(jù)庫數(shù)據(jù)同步的環(huán)節(jié),所以就能做到了實(shí)時(shí)查詢。對于信控來說也同樣,以往系統(tǒng)在累完賬后要按照一定周期刷新信控?cái)?shù)據(jù),這就存在一個(gè)時(shí)間差,不能夠完全做到實(shí)時(shí)。

而采用內(nèi)存數(shù)據(jù)庫后,信控可以直接取得內(nèi)存數(shù)據(jù)庫中的實(shí)時(shí)話費(fèi)累計(jì)表中的數(shù)據(jù),完全實(shí)現(xiàn)實(shí)時(shí)預(yù)警、停機(jī)。二次批價(jià)和累賬中采用內(nèi)存數(shù)據(jù)庫后,對防欺詐、收入保障系統(tǒng)也有相當(dāng)大的好處,這樣能夠充分保證運(yùn)營商的切身利益。

另外,在采用內(nèi)存數(shù)據(jù)庫后,整體提高了系統(tǒng)批價(jià)、累賬的處理速度,大大緩解訪問磁盤數(shù)據(jù)庫的壓力,提高數(shù)據(jù)查詢、修改、刪除的效率,也為后付費(fèi)和預(yù)付費(fèi)的融合提供了可能。

數(shù)據(jù)同步

電信營業(yè)數(shù)據(jù)和計(jì)費(fèi)系統(tǒng)中的數(shù)據(jù)總是在不斷的變化中,這就涉及內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)和磁盤數(shù)據(jù)庫數(shù)據(jù)的同步問題(為了描述清楚,這里的磁盤數(shù)據(jù)庫以O(shè)racle DB為例來說明)。數(shù)據(jù)同步包括兩部分: 從內(nèi)存數(shù)據(jù)庫到Oracle DB數(shù)據(jù)同步和從Oracle DB到內(nèi)存數(shù)據(jù)庫的同步。

Oracle DB到內(nèi)存數(shù)據(jù)庫同步

這部分?jǐn)?shù)據(jù)同步采用增量表的方式,營業(yè)系統(tǒng)或CRM新增或更新的數(shù)據(jù)將生成到Oracle數(shù)據(jù)庫的增量表中,計(jì)費(fèi)后臺(tái)程序先到這些增量表中查詢數(shù)據(jù)。如果能在這些增量表中查到數(shù)據(jù)就把這些數(shù)據(jù)更新到內(nèi)存數(shù)據(jù)庫對應(yīng)表中,如果查不到,就直接從內(nèi)存數(shù)據(jù)庫中直接查詢,從而保證了數(shù)據(jù)的完整性和實(shí)時(shí)性。由于增量表的數(shù)據(jù)量一般會(huì)很小,所以這部分操作不會(huì)影響系統(tǒng)的性能。

內(nèi)存數(shù)據(jù)庫到Oracle DB同步

由于Oracle的計(jì)費(fèi)后臺(tái)批價(jià)、累賬數(shù)據(jù)幾乎都加載到了內(nèi)存數(shù)據(jù)庫中,所以O(shè)racle數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)表將主要用于對內(nèi)存數(shù)據(jù)庫的數(shù)據(jù)備份。

用戶最新的實(shí)時(shí)話費(fèi)等信息都保存在內(nèi)存數(shù)據(jù)庫中,實(shí)時(shí)話費(fèi)查詢將直接連接到內(nèi)存數(shù)據(jù)庫中查詢,保證用戶得到最新的費(fèi)用信息。信控也直接從內(nèi)存數(shù)據(jù)庫查詢數(shù)據(jù),因此對Oracle數(shù)據(jù)庫中的這部分?jǐn)?shù)據(jù)已經(jīng)沒有實(shí)時(shí)性的要求。這時(shí)內(nèi)存數(shù)據(jù)庫到Oracle的同步可以由應(yīng)用程序生成文件,定時(shí)地往Oracle數(shù)據(jù)庫中同步備份,或者采用Oracle存儲(chǔ)過程在系統(tǒng)相對空閑時(shí)間段進(jìn)行數(shù)據(jù)導(dǎo)入就可以了。

內(nèi)存數(shù)據(jù)庫與傳統(tǒng)數(shù)據(jù)庫的異同

傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)是關(guān)系型數(shù)據(jù)庫,開發(fā)這種數(shù)據(jù)庫的目的,是處理永久、穩(wěn)定的數(shù)據(jù)。關(guān)系數(shù)據(jù)庫強(qiáng)調(diào)維護(hù)數(shù)據(jù)的完整性、一致性,但很難顧及有關(guān)數(shù)據(jù)及其處理的定時(shí)限制,不能滿足工業(yè)生產(chǎn)管理實(shí)時(shí)應(yīng)用的需要,因?yàn)閷?shí)時(shí)事務(wù)要求系統(tǒng)能較準(zhǔn)確地預(yù)報(bào)事務(wù)的運(yùn)行時(shí)間。

對磁盤數(shù)據(jù)庫而言,由于磁盤存取、內(nèi)外存的數(shù)據(jù)傳遞、緩沖區(qū)管理、排隊(duì)等待及鎖的延遲等使得事務(wù)實(shí)際平均執(zhí)行時(shí)間與估算的最壞情況執(zhí)行時(shí)間相差很大,如果將整個(gè)數(shù)據(jù)庫或其主要的“工作”部分放入內(nèi)存,使每個(gè)事務(wù)在執(zhí)行過程中沒有I/O,則為系統(tǒng)較準(zhǔn)確估算和安排事務(wù)的運(yùn)行時(shí)間,使之具有較好的動(dòng)態(tài)可預(yù)報(bào)性提供了有力的支持,同時(shí)也為實(shí)現(xiàn)事務(wù)的定時(shí)限制打下了基礎(chǔ)。這就是內(nèi)存數(shù)據(jù)庫出現(xiàn)的主要原因。

內(nèi)存數(shù)據(jù)庫所處理的數(shù)據(jù)通常是“短暫”的,即有一定的有效時(shí)間,過時(shí)則有新的數(shù)據(jù)產(chǎn)生,而當(dāng)前的決策推導(dǎo)變成無效。所以,實(shí)際應(yīng)用中采用內(nèi)存數(shù)據(jù)庫來處理實(shí)時(shí)性強(qiáng)的業(yè)務(wù)邏輯處理數(shù)據(jù)。而傳統(tǒng)數(shù)據(jù)庫旨在處理永久、穩(wěn)定的數(shù)據(jù),其性能目標(biāo)是高的系統(tǒng)吞吐量和低的代價(jià),處理數(shù)據(jù)的實(shí)時(shí)性就要考慮的相對少一些。實(shí)際應(yīng)用中利用傳統(tǒng)數(shù)據(jù)庫這一特性存放相對實(shí)時(shí)性要求不高的數(shù)據(jù)。

在實(shí)際應(yīng)用中這兩種數(shù)據(jù)庫常常結(jié)合使用,而不是以內(nèi)存數(shù)據(jù)庫替代傳統(tǒng)數(shù)據(jù)庫。

而內(nèi)存數(shù)據(jù)庫也分全內(nèi)存計(jì)算和熱內(nèi)存計(jì)算。全內(nèi)存計(jì)算,即數(shù)據(jù)需要全部裝載到內(nèi)存中進(jìn)行計(jì)算,對硬件要求高,譬如QlikView等產(chǎn)品。熱內(nèi)存計(jì)算,部分?jǐn)?shù)據(jù)加載到內(nèi)存中即可以進(jìn)行計(jì)算,硬盤和內(nèi)存會(huì)有數(shù)據(jù)交換來計(jì)算未加載的數(shù)據(jù),譬如Yonghong Z-Suite。

分類

存數(shù)據(jù)庫和磁盤數(shù)據(jù)庫

MMDB與DRDB之間主要區(qū)別在于MMDB的主數(shù)據(jù)庫常駐內(nèi)存,體系結(jié)構(gòu)設(shè)計(jì)的優(yōu)化目標(biāo)是提高內(nèi)存和CPU使用效率[6,24]。與DRDB相比,MMDB的優(yōu)點(diǎn)如下:

完成同樣的功能,所需機(jī)器指令大大降低;

事務(wù)處理無需I/O,極大提高了系統(tǒng)性能;

不再需要緩沖區(qū)管理器,消除了磁盤和內(nèi)存之間數(shù)據(jù)拷貝開銷;

在數(shù)據(jù)組織與管理中,廣泛使用指針,簡化了內(nèi)存管理,降低了空間開銷。

參考資料 >

生活家百科家居網(wǎng)