內(nèi)存計(jì)算那點(diǎn)事
迄今為止,內(nèi)存還是我們目前能用到的最快的存儲(chǔ)設(shè)備,把數(shù)據(jù)盡可能放進(jìn)內(nèi)存成為各種應(yīng)用提高數(shù)據(jù)訪問性能的最有效途徑。對(duì)于很多關(guān)鍵業(yè)務(wù)系統(tǒng)而言,內(nèi)存又是一種“揮發(fā)性”的和大小非常有限的存儲(chǔ)設(shè)備,如何在保證性能的同時(shí)使數(shù)據(jù)能持久化,如何把有限的內(nèi)存投入到無限的待處理數(shù)據(jù)上是程序設(shè)計(jì)的一個(gè)重大課題。
Oracle的內(nèi)存TimesTen內(nèi)存數(shù)據(jù)庫為有高并發(fā),低延時(shí)和高可用要求的關(guān)鍵業(yè)務(wù)系統(tǒng)提供了一個(gè)接近完美的解決方案:把數(shù)據(jù)放進(jìn)內(nèi)存,使用SQL簡化開發(fā),應(yīng)用開發(fā)者可以更加專注在業(yè)務(wù)實(shí)現(xiàn)上而不用關(guān)心底層的內(nèi)存分配。TimesTen在大并發(fā)的環(huán)境中還能提供媲美Oracle數(shù)據(jù)庫的數(shù)據(jù)完整性,一致性和可恢復(fù)性,內(nèi)存的“揮發(fā)性”缺點(diǎn)也被克服,維護(hù)工作也極大地簡化了。因此Oracle TimesTen被廣泛地應(yīng)用于電信,金融等行業(yè)已經(jīng)有20多年的歷史。
基于內(nèi)存計(jì)算的另外一個(gè)問題始終困擾著業(yè)內(nèi)人士——內(nèi)存有限而數(shù)據(jù)相對(duì)無限:單一服務(wù)器的內(nèi)存遠(yuǎn)遠(yuǎn)不足以存儲(chǔ)需要處理的數(shù)據(jù),頻繁的內(nèi)存交換消耗太多資源,用戶不得不使用手工分庫的方式把數(shù)據(jù)分散到多個(gè)服務(wù)器上來處理,這又帶來了管理、開發(fā)復(fù)雜,擴(kuò)展性差等諸多問題。
隨著技術(shù)的發(fā)展,分布式內(nèi)存網(wǎng)格技術(shù)也開始被用于加速數(shù)據(jù)訪存的速度,比如Redis,Oracle Coherence等。分布式內(nèi)存網(wǎng)格技術(shù)采用key-value的內(nèi)存數(shù)據(jù)存儲(chǔ)方式可以方便把磁盤型數(shù)據(jù)庫的數(shù)據(jù)分布到集群系統(tǒng)的各個(gè)節(jié)點(diǎn)上緩存,為簡單的數(shù)據(jù)查詢和事務(wù)提供了很高的性能。但這類技術(shù)的問題是:數(shù)據(jù)的強(qiáng)一致性,數(shù)據(jù)持久化,復(fù)雜報(bào)表和統(tǒng)計(jì),大并發(fā)事務(wù)處理等。
分布式的關(guān)系型內(nèi)存數(shù)據(jù)庫——理想的內(nèi)存數(shù)據(jù)庫
對(duì)于一個(gè)高并發(fā),實(shí)時(shí)響應(yīng)需求的關(guān)鍵業(yè)務(wù)系統(tǒng)而言,一個(gè)分布式的關(guān)系型數(shù)據(jù)庫是最理想的選擇:它既具有關(guān)系型數(shù)據(jù)ACID的特性,可以處理高并發(fā)的用戶請(qǐng)求,可以實(shí)時(shí)響應(yīng)業(yè)務(wù)的數(shù)據(jù)訪問請(qǐng)求,擁有完善的備份恢復(fù)和容災(zāi)機(jī)制,同時(shí)和NoSQL的內(nèi)存網(wǎng)格技術(shù)一樣,可以把需要處理的數(shù)據(jù)分散到一個(gè)集群上的所有節(jié)點(diǎn)上,可以根據(jù)需要擴(kuò)展集群中的數(shù)據(jù)處理節(jié)點(diǎn)。今年5月初,Oracle分布式內(nèi)存數(shù)據(jù)庫——這個(gè)理想中的,綜合了內(nèi)存計(jì)算,分布式處理,關(guān)系型數(shù)據(jù)庫的分布式內(nèi)存數(shù)據(jù)庫終于正式推向市場。
TimesTen 18.1 Scaleout的特點(diǎn)
Oracle的分布式內(nèi)存數(shù)據(jù)庫使用了已經(jīng)20多年歷史的TimesTen的內(nèi)核來構(gòu)建,正式發(fā)行版為被稱為TimesTen 18.1 Scaleout,版本號(hào)的含義為2018年的第一個(gè)主要發(fā)行版。
首先TimesTen 18.1 Scaleout是一個(gè)嚴(yán)格意義上的關(guān)系型數(shù)據(jù)庫;它擁有和Oracle 數(shù)據(jù)庫一樣的ACID特性,比如:事務(wù)的原子性和持久性,事務(wù)的提交和回滾,基于版本的并發(fā)控制,讀寫操作互不阻塞等等。
其次,作為一個(gè)分布式的內(nèi)存數(shù)據(jù)庫它是一個(gè)邏輯上單一,物理上分散的分布式內(nèi)存數(shù)據(jù)庫,TimesTen 18.1 Scaleout中的數(shù)據(jù)分散存儲(chǔ)到數(shù)據(jù)庫集群的各個(gè)節(jié)點(diǎn)中,應(yīng)用從任何一點(diǎn)接入數(shù)據(jù)庫都可以訪問到全部數(shù)據(jù),應(yīng)用不需要知道數(shù)據(jù)存放的位置。這一點(diǎn)也不同于市場上的分片式數(shù)據(jù)庫,這樣的設(shè)計(jì)極大地簡化了應(yīng)用開發(fā)和數(shù)據(jù)庫管理的難度。
TimesTen Scaleout的幾個(gè)基本概念
一組內(nèi)部互聯(lián)的運(yùn)行Oracle TimesTen Scaleout的服務(wù)器我們稱為一個(gè)Grid,運(yùn)行中TimesTen Scaleout代碼稱為實(shí)例,TimesTen Scaleout的實(shí)例又分為數(shù)據(jù)實(shí)例和管理實(shí)例,數(shù)據(jù)實(shí)例的的概念和Oracle數(shù)據(jù)庫的實(shí)例是非常類似的,它包括數(shù)據(jù)緩存和后臺(tái)進(jìn)程。
每個(gè)TimesTen Scaleout數(shù)據(jù)實(shí)例包含一個(gè)我們稱之為Element的數(shù)據(jù)持久化最小的單位,Element擁有整個(gè)數(shù)據(jù)庫中一部分?jǐn)?shù)據(jù)和這個(gè)數(shù)據(jù)庫中完整用戶信息和 schema信息;每個(gè)element有自己的持久化檢查點(diǎn)文件和事務(wù)日志文件, Element可以使用副本來實(shí)現(xiàn)高可用性和容災(zāi)。
在一個(gè)集群中,一般配置有1到2個(gè)管理實(shí)例來跟蹤監(jiān)控整個(gè)集群的運(yùn)行狀態(tài)。
數(shù)據(jù)分布的方式
那么如何把所有數(shù)據(jù)分配到每一個(gè)Element中呢?通常來說有以下方法:
DISTRIBUTE
基于一致性哈希算法分布,通常用于大數(shù)據(jù)庫表,比如:基于Cust_ID 的哈希值,比如我們把CUSTOMER表中各行分布到所有elements 當(dāng)中可以使用如下語句:
CREATETABLE?CUSTOMER?(?
ID?NUMBER?NOT?NULL?PRIMARY?KEY,?
NAME?VARCHAR2(100),?
…?
)?DISTRIBUTE?BY?HASH;?
REFERENCE
子表與父表相關(guān)聯(lián)的行共存于相同element,優(yōu)化本地事務(wù)將 ORDERS 表中與CUSTOMER相關(guān)聯(lián)的行存放于相同element當(dāng)中。
DUPLICATE
查詢?yōu)橹鞯男”碓诿總€(gè)element存放完整數(shù)據(jù),優(yōu)化本地事務(wù)。如將 PRODUCT 表在所有 elements 當(dāng)中都存一份全量數(shù)據(jù),這種情況適用于比較小的,同時(shí)變更不是很頻繁的表
高可用的實(shí)現(xiàn)
前面提到了TimesTen 18.1 Scaleout是通過Element的多副本方式實(shí)現(xiàn)高可用性的,這種機(jī)制稱為K-Safety(K>1),見下圖:
一個(gè)完整的數(shù)據(jù)集稱為Data Space, 它包含這個(gè)數(shù)據(jù)庫所有的Elements,上圖的Dataspace Group1 包含的Element 1和Element 3 構(gòu)成了一個(gè)完整的數(shù)據(jù)庫。擁有相同的Element的集合被稱為Replica Set,它們互為對(duì)方的拷貝,比如上圖的 Replica Set1包含的Element 1和Element 2,它們位于不同的機(jī)器上從而實(shí)現(xiàn)數(shù)據(jù)的高可用性。
互為拷貝的Element是雙活的,也就是說應(yīng)用可以在其中任意一個(gè)Element上發(fā)起讀寫的事務(wù)操作而不相互影響,數(shù)據(jù)庫系統(tǒng)負(fù)責(zé)這兩個(gè)Element的數(shù)據(jù)同步。
在這種架構(gòu)下,即使多個(gè)Element發(fā)生異常,只要有一套完整可用的副本對(duì)應(yīng)用就不會(huì)有影響。如果整個(gè)replica set 發(fā)生異常,應(yīng)用也可以選擇接受只返回剩余數(shù)據(jù)的結(jié)果集。
集中化安裝與管理
TimesTen 18.1 Scaleout的管理操作都均可通過一個(gè)主機(jī)用圖形界面或者命令行的方式通過一個(gè)接入點(diǎn)完成集群地所有操作,包括:
軟件安裝
補(bǔ)丁應(yīng)用
配置管理
數(shù)據(jù)庫創(chuàng)建與管理
數(shù)據(jù)庫監(jiān)控
備份與恢復(fù)
日志搜集
Oracle的幾種內(nèi)存緩存技術(shù)的比較
隨著TimesTen 18.1 Scaleout的推出,Oracle進(jìn)一步完善了實(shí)時(shí)內(nèi)存數(shù)據(jù)處理的拼圖,傳統(tǒng)的面向OLTP的TimesTen也升級(jí)了到了18.1,這個(gè)版本稱為TimesTen 18.1 Classic。讓我們看一下他們之間使用場景有什么不同:
?1.TimesTen18.1 Classic
使用場景: 用于實(shí)時(shí),準(zhǔn)實(shí)時(shí)的OLTP系統(tǒng)加速。如果TimesTen18.1 Classic的機(jī)器內(nèi)存足夠存放需要處理的數(shù)據(jù),TimesTen 18.1 Classic可以提供更高的數(shù)據(jù)處理實(shí)時(shí)性。
部署:可以單獨(dú)運(yùn)行或者作為Oracle數(shù)據(jù)庫的緩沖,使用CacheGroup 或者其它方式和Oracle數(shù)據(jù)庫同步數(shù)據(jù)。
2.TimesTen 18.1 Scaleout
使用場景:分布式、容錯(cuò)、彈性伸縮的關(guān)系型內(nèi)存數(shù)據(jù)庫 ,用于高并發(fā),低延時(shí)的OLTP 為主的關(guān)鍵業(yè)務(wù)系統(tǒng);單機(jī)內(nèi)存無法存放需要實(shí)時(shí)處理處理的全部數(shù)據(jù),不得不手工分庫的場景。
部署:使用服務(wù)器集群部署。
?3.Oracle Database In-Memory Option
使用場景:Oracle12.1.02數(shù)據(jù)庫引入的數(shù)據(jù)列式內(nèi)存技術(shù),主要用于加速數(shù)據(jù)分析和報(bào)表的速度。
部署:用戶可以把數(shù)據(jù)庫中需要做分析和報(bào)表的數(shù)據(jù)庫表加上列式內(nèi)存存儲(chǔ)的選項(xiàng),數(shù)據(jù)會(huì)在數(shù)據(jù)庫啟動(dòng)或者第一次查詢這個(gè)表的時(shí)候把數(shù)據(jù)以列式或者列式壓縮的方式緩存到Oracle數(shù)據(jù)庫的SGA區(qū)的In Memory Area中:優(yōu)化器會(huì)自動(dòng)優(yōu)化SQL的訪問路徑,讓需要訪問列式內(nèi)存數(shù)據(jù)的SQL從In Memory Area中獲取數(shù)據(jù)。
?4.Oracle Coherence
使用場景:Oracle Coherence是分布式內(nèi)存網(wǎng)格技術(shù),一般用于中間層數(shù)據(jù)訪問加速。
部署:數(shù)據(jù)以Key Value的方式存放在內(nèi)存中,使用RESTAPI訪問。
總結(jié)
在大數(shù)據(jù)和云時(shí)代,實(shí)時(shí)數(shù)據(jù)處理有多種方式,Oracle 提供了多種內(nèi)存技術(shù)的產(chǎn)品和技術(shù)加速數(shù)據(jù)訪問和處理的速度,這次TimesTen 18.1 Scaleout的推出進(jìn)一步完善了Oracle 內(nèi)存計(jì)算產(chǎn)品家族,它繼承了久經(jīng)考驗(yàn)的TimesTen內(nèi)存數(shù)據(jù)庫的內(nèi)核,又吸收了No SQL數(shù)據(jù)庫的一些設(shè)計(jì)理念,必將在很多對(duì)實(shí)時(shí)數(shù)據(jù)處理有很高要求的關(guān)鍵業(yè)務(wù)系統(tǒng)上得到應(yīng)用。
評(píng)論
查看更多