關(guān)系是客觀存在的自然規(guī)律,擺脫就是在修改事實(shí)模型。用NOSQL,我覺得可以理解成關(guān)系模型的變化,而不是另起爐灶。
創(chuàng)新互聯(lián)專注于永靖企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城開發(fā)。永靖網(wǎng)站建設(shè)公司,為永靖等地區(qū)提供建站服務(wù)。全流程定制開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
2. 什么是NoSQL?
2.1 NoSQL 概述
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,
泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題,包括超大規(guī)模數(shù)據(jù)的存儲(chǔ)。
(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲(chǔ)不需要固定的模式,無需多余操作就可以橫向擴(kuò)展。
2.2 NoSQL代表
MongDB、 Redis、Memcache
3. 關(guān)系型數(shù)據(jù)庫與NoSQL的區(qū)別?
3.1 RDBMS
高度組織化結(jié)構(gòu)化數(shù)據(jù)
結(jié)構(gòu)化查詢語言(SQL)
數(shù)據(jù)和關(guān)系都存儲(chǔ)在單獨(dú)的表中。
數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言
嚴(yán)格的一致性
基礎(chǔ)事務(wù)
ACID
關(guān)系型數(shù)據(jù)庫遵循ACID規(guī)則
事務(wù)在英文中是transaction,和現(xiàn)實(shí)世界中的交易很類似,它有如下四個(gè)特性:
A (Atomicity) 原子性
原子性很容易理解,也就是說事務(wù)里的所有操作要么全部做完,要么都不做,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個(gè)操作失敗,整個(gè)事務(wù)就失敗,需要回滾。比如銀行轉(zhuǎn)賬,從A賬戶轉(zhuǎn)100元至B賬戶,分為兩個(gè)步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會(huì)莫名其妙少了100元。
C (Consistency) 一致性
一致性也比較容易理解,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài),事務(wù)的運(yùn)行不會(huì)改變數(shù)據(jù)庫原本的一致性約束。
I (Isolation) 獨(dú)立性
所謂的獨(dú)立性是指并發(fā)的事務(wù)之間不會(huì)互相影響,如果一個(gè)事務(wù)要訪問的數(shù)據(jù)正在被另外一個(gè)事務(wù)修改,只要另外一個(gè)事務(wù)未提交,它所訪問的數(shù)據(jù)就不受未提交事務(wù)的影響。比如現(xiàn)有有個(gè)交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個(gè)交易還未完成的情況下,如果此時(shí)B查詢自己的賬戶,是看不到新增加的100元的
D (Durability) 持久性
持久性是指一旦事務(wù)提交后,它所做的修改將會(huì)永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機(jī)也不會(huì)丟失。
3.2 NoSQL
代表著不僅僅是SQL
沒有聲明性查詢語言
沒有預(yù)定義的模式
鍵 - 值對(duì)存儲(chǔ),列存儲(chǔ),文檔存儲(chǔ),圖形數(shù)據(jù)庫
最終一致性,而非ACID屬性
非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
CAP定理
高性能,高可用性和可伸縮性
分布式數(shù)據(jù)庫中的CAP原理(了解)
CAP定理:
Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動(dòng)都是同步的
Availability(可用性), 好的響應(yīng)性能
Partition tolerance(分區(qū)容錯(cuò)性) 可靠性
P: 系統(tǒng)中任意信息的丟失或失敗不會(huì)影響系統(tǒng)的繼續(xù)運(yùn)作。
定理:任何分布式系統(tǒng)只可同時(shí)滿足二點(diǎn),沒法三者兼顧。
CAP理論的核心是:一個(gè)分布式系統(tǒng)不可能同時(shí)很好的滿足一致性,可用性和分區(qū)容錯(cuò)性這三個(gè)需求,
因此,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:
CA - 單點(diǎn)集群,滿足一致性,可用性的系統(tǒng),通常在可擴(kuò)展性上不太強(qiáng)大。
CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。
AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通??赡軐?duì)一致性要求低一些。
CAP理論就是說在分布式存儲(chǔ)系統(tǒng)中,最多只能實(shí)現(xiàn)上面的兩點(diǎn)。
而由于當(dāng)前的網(wǎng)絡(luò)硬件肯定會(huì)出現(xiàn)延遲丟包等問題,所以分區(qū)容忍性是我們必須需要實(shí)現(xiàn)的。
所以我們只能在一致性和可用性之間進(jìn)行權(quán)衡,沒有NoSQL系統(tǒng)能同時(shí)保證這三點(diǎn)。
說明:C:強(qiáng)一致性 A:高可用性 P:分布式容忍性
舉例:
CA:傳統(tǒng)Oracle數(shù)據(jù)庫
AP:大多數(shù)網(wǎng)站架構(gòu)的選擇
CP:Redis、Mongodb
注意:分布式架構(gòu)的時(shí)候必須做出取舍。
一致性和可用性之間取一個(gè)平衡。多余大多數(shù)web應(yīng)用,其實(shí)并不需要強(qiáng)一致性。
因此犧牲C換取P,這是目前分布式數(shù)據(jù)庫產(chǎn)品的方向。
4. 當(dāng)下NoSQL的經(jīng)典應(yīng)用
當(dāng)下的應(yīng)用是 SQL 與 NoSQL 一起使用的。
代表項(xiàng)目:阿里巴巴商品信息的存放。
去 IOE 化。
ps:I 是指 IBM 的小型機(jī),很貴的,好像好幾萬一臺(tái);O 是指 Oracle 數(shù)據(jù)庫,也很貴的,好幾萬呢;M 是指 EMC 的存儲(chǔ)設(shè)備,也很貴的。
難點(diǎn):
數(shù)據(jù)類型多樣性。
數(shù)據(jù)源多樣性和變化重構(gòu)。
數(shù)據(jù)源改造而服務(wù)平臺(tái)不需要大面積重構(gòu)。
value值里可以存放一組數(shù)據(jù),取出來再解析。關(guān)鍵是key的設(shè)計(jì),一般設(shè)計(jì)成查詢條件的組合,中間用冒號(hào)分隔。
1.B 2.C 3.B 4.C 5.D 6.C 7.C 8.D 9.C 10.A
11.A 12.A 13.A --不太確定 14.B 15.C 16.A 17.B 18.A 19.D 20.C
1.試述事務(wù)的概念及事務(wù)的四個(gè)特性。
答:
事務(wù)是用戶定義的一個(gè)數(shù)據(jù)庫操作序列,這些操作要么全做要么全不做,是一個(gè)不可分割的工作單位。
事務(wù)具有四個(gè)特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持續(xù)性(Durability)。這個(gè)四個(gè)特性也簡稱為ACID特性。
原子性:事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包括的諸操作要么都做,要么都不做。
一致性:事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。
隔離性:一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)其他并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。
持續(xù)性:持續(xù)性也稱永久性(Permanence),指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來的其他操作或故障不應(yīng)該對(duì)其執(zhí)行結(jié)果有任何影響。
2.為什么事務(wù)非正常結(jié)束時(shí)會(huì)影響數(shù)據(jù)庫數(shù)據(jù)的正確性,請(qǐng)列舉一例說明之。
答:
事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。如果數(shù)據(jù)庫系統(tǒng)運(yùn)行中發(fā)生故障,有些事務(wù)尚未完成就被迫中斷,這些未完成事務(wù)對(duì)數(shù)據(jù)庫所做的修改有一部分已寫入物理數(shù)據(jù)庫,這時(shí)數(shù)據(jù)庫就處于一種不正確的狀態(tài),或者說是不一致的狀態(tài)。
例如某工廠的庫存管理系統(tǒng)中,要把數(shù)量為Q的某種零件從倉庫1移到倉庫2存放。
則可以定義一個(gè)事務(wù)T,T包括兩個(gè)操作;Q1=Q1-Q,Q2=Q2+Q。如果T非正常終止時(shí)只做了第一個(gè)操作,則數(shù)據(jù)庫就處于不一致性狀態(tài),庫存量無緣無故少了Q。
3.數(shù)據(jù)庫中為什么要有恢復(fù)子系統(tǒng)?它的功能是什么?
答:
因?yàn)橛?jì)算機(jī)系統(tǒng)中硬件的故障、軟件的錯(cuò)誤、操作員的失誤以及惡意的破壞是不可避免的,這些故障輕則造成運(yùn)行事務(wù)非正常中斷,影響數(shù)據(jù)庫中數(shù)據(jù)的正確性,重則破壞數(shù)據(jù)庫,使數(shù)據(jù)庫中全部或部分?jǐn)?shù)據(jù)丟失,因此必須要有恢復(fù)子系統(tǒng)。
恢復(fù)子系統(tǒng)的功能是:把數(shù)據(jù)庫從錯(cuò)誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)(亦稱為一致狀態(tài)或完整狀態(tài))。
4.?dāng)?shù)據(jù)庫運(yùn)行中可能產(chǎn)生的故障有哪幾類?哪些故障影響事務(wù)的正常執(zhí)行?哪些故障破壞數(shù)據(jù)庫數(shù)據(jù)?
答:數(shù)據(jù)庫系統(tǒng)中可能發(fā)生各種各樣的故障,大致可以分以下幾類:
(1)事務(wù)內(nèi)部的故障;
(2)系統(tǒng)故障;
(3)介質(zhì)故障;
(4)計(jì)算機(jī)病毒。
事務(wù)故障、系統(tǒng)故障和介質(zhì)故障影響事務(wù)的正常執(zhí)行;介質(zhì)故障和計(jì)算機(jī)病毒破壞數(shù)據(jù)
庫數(shù)據(jù)。
5.據(jù)庫恢復(fù)的基本技術(shù)有哪些?
答:
數(shù)據(jù)轉(zhuǎn)儲(chǔ)和登錄日志文件是數(shù)據(jù)庫恢復(fù)的基本技術(shù)。
當(dāng)系統(tǒng)運(yùn)行過程中發(fā)生故障,利用轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫后備副本和日志文件就可以將數(shù)據(jù)庫恢復(fù)到故障前的某個(gè)一致性狀態(tài)。
6. 數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)的意義是什么? 試比較各種數(shù)據(jù)轉(zhuǎn)儲(chǔ)方法。
答:
數(shù)據(jù)轉(zhuǎn)儲(chǔ)是數(shù)據(jù)庫恢復(fù)中采用的基本技術(shù)。所謂轉(zhuǎn)儲(chǔ)即DBA定期地將數(shù)據(jù)庫復(fù)制到磁帶或另一個(gè)磁盤上保存起來的過程。當(dāng)數(shù)據(jù)庫遭到破壞后可以將后備副本重新裝入,將數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài)。
靜態(tài)轉(zhuǎn)儲(chǔ):在系統(tǒng)中無運(yùn)行事務(wù)時(shí)進(jìn)行的轉(zhuǎn)儲(chǔ)操作。靜態(tài)轉(zhuǎn)儲(chǔ)簡單,但必須等待正運(yùn)行的用戶事務(wù)結(jié)束才能進(jìn)行。同樣,新的事務(wù)必須等待轉(zhuǎn)儲(chǔ)結(jié)束才能執(zhí)行。顯然,這會(huì)降低數(shù)據(jù)庫的可用性。
動(dòng)態(tài)轉(zhuǎn)儲(chǔ):指轉(zhuǎn)儲(chǔ)期間允許對(duì)數(shù)據(jù)庫進(jìn)行存取或修改。動(dòng)態(tài)轉(zhuǎn)儲(chǔ)可克服靜態(tài)轉(zhuǎn)儲(chǔ)的缺點(diǎn),它不用等待正在運(yùn)行的用戶事務(wù)結(jié)束,也不會(huì)影響新事務(wù)的運(yùn)行。但是,轉(zhuǎn)儲(chǔ)結(jié)束時(shí)后援副本上的數(shù)據(jù)并不能保證正確有效。因?yàn)檗D(zhuǎn)儲(chǔ)期間運(yùn)行的事務(wù)可能修改了某些數(shù)據(jù),使得后援副本上的數(shù)據(jù)不是數(shù)據(jù)庫的一致版本。
為此,必須把轉(zhuǎn)儲(chǔ)期間各事務(wù)對(duì)數(shù)據(jù)庫的修改活動(dòng)登記下來,建立日志文件(log file)。這樣,后援副本加上日志文件就能得到數(shù)據(jù)庫某一時(shí)刻的正確狀態(tài)。
轉(zhuǎn)儲(chǔ)還可以分為海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)兩種方式。
海量轉(zhuǎn)儲(chǔ)是指每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫。增量轉(zhuǎn)儲(chǔ)則指每次只轉(zhuǎn)儲(chǔ)上一次轉(zhuǎn)儲(chǔ)后更新過的數(shù)據(jù)。從恢復(fù)角度看,使用海量轉(zhuǎn)儲(chǔ)得到的后備副本進(jìn)行恢復(fù)一般說來更簡單些。但如果數(shù)據(jù)庫很大,事務(wù)處理又十分頻繁,則增量轉(zhuǎn)儲(chǔ)方式更實(shí)用更有效。
7. 什么是日志文件?為什么要設(shè)立日志文件?
答:
(1)日志文件是用來記錄事務(wù)對(duì)數(shù)據(jù)庫的更新操作的文件。
(2)設(shè)立日志文件的目的是: 進(jìn)行事務(wù)故障恢復(fù);進(jìn)行系統(tǒng)故障恢復(fù);協(xié)助后備副本進(jìn)行介質(zhì)故障恢復(fù)。
8. 登記日志文件時(shí)為什么必須先寫日志文件,后寫數(shù)據(jù)庫?
答:
把對(duì)數(shù)據(jù)的修改寫到數(shù)據(jù)庫中和把表示這個(gè)修改的日志記錄寫到日志文件中是兩個(gè)不同的操作。有可能在這兩個(gè)操作之間發(fā)生故障,即這兩個(gè)寫操作只完成了一個(gè)。
如果先寫了數(shù)據(jù)庫修改,而在運(yùn)行記錄中沒有登記這個(gè)修改,則以后就無法恢復(fù)這個(gè)修改了。如果先寫日志,但沒有修改數(shù)據(jù)庫,在恢復(fù)時(shí)只不過是多執(zhí)行一次UNDO操作,并不會(huì)影響數(shù)據(jù)庫的正確性。所以一定要先寫日志文件,即首先把日志記錄寫到日志文件中,然后寫數(shù)據(jù)庫的修改。
9. 針對(duì)不同的故障,試給出恢復(fù)的策略和方法。(即如何進(jìn)行事務(wù)故障的恢復(fù)?系統(tǒng)故障的恢復(fù)?介質(zhì)故障恢復(fù)?)
答:
事務(wù)故障的恢復(fù):
事務(wù)故障的恢復(fù)是由DBMS自動(dòng)完成的,對(duì)用戶是透明的。
DBMS執(zhí)行恢復(fù)步驟是:
(1)反向掃描文件日志(即從最后向前掃描日志文件),查找該事務(wù)的更新操作。
(2)對(duì)該事務(wù)的更新操作執(zhí)行逆操作。即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫。
(3)繼續(xù)反向掃描日志文件,做同樣處理。
(4)如此處理下去,直至讀到此事務(wù)的開始標(biāo)記,該事務(wù)故障的恢復(fù)就完成了。
答:
系統(tǒng)故障的恢復(fù):
系統(tǒng)故障可能會(huì)造成數(shù)據(jù)庫處于不一致狀態(tài):
一是未完成事務(wù)對(duì)數(shù)據(jù)庫的更新可能已寫入數(shù)據(jù)庫;
二是已提交事務(wù)對(duì)數(shù)據(jù)庫的更新可能還留在緩沖區(qū),沒來得及寫入數(shù)據(jù)庫。
因此恢復(fù)操作就是要撤銷(UNDO)故障發(fā)生時(shí)未完成的事務(wù),重做(REDO)已完成的事務(wù)。
系統(tǒng)的恢復(fù)步驟是:
(1)正向掃描日志文件,找出在故障發(fā)生前已經(jīng)提交的事務(wù)隊(duì)列(REDO隊(duì)列)和未完成的事務(wù)隊(duì)列(UNDO隊(duì)列)。
(2)對(duì)撤銷隊(duì)列中的各個(gè)事務(wù)進(jìn)行UNDO處理。
進(jìn)行UNDO處理的方法是,反向掃描日志文件,對(duì)每個(gè)UNDO事務(wù)的更新操作執(zhí)行逆操作,即將日志記錄中“更新前的值”(Before Image)寫入數(shù)據(jù)庫。
(3)對(duì)重做隊(duì)列中的各個(gè)事務(wù)進(jìn)行REDO處理。
進(jìn)行REDO處理的方法是:正向掃描日志文件,對(duì)每個(gè)REDO事務(wù)重新執(zhí)行日志文件登記的操作。即將日志記錄中“更新后的值”(After Image)寫入數(shù)據(jù)庫。
*解析:
在第(1)步中如何找出REDO隊(duì)列和UNDO隊(duì)列?請(qǐng)大家思考一下。
下面給出一個(gè)算法:
1) 建立兩個(gè)事務(wù)隊(duì)列:
· UNDO-LIST: 需要執(zhí)行undo操作的事務(wù)集合;
· REDO-LIST: 需要執(zhí)行redo操作的事務(wù)集合;
兩個(gè)事務(wù)隊(duì)列初始均為空。
2) 從日志文件頭開始,正向掃描日志文件
· 如有新開始(遇到Begin Transaction)的事務(wù)Ti,把Ti暫時(shí)放入U(xiǎn)NDO-LIST隊(duì)列;
· 如有提交的事務(wù)(遇到End Transaction)Tj,把Tj從UNDO-LIST隊(duì)列移到REDO-LIST隊(duì)列;
直到日志文件結(jié)束
答:
介質(zhì)故障的恢復(fù):
介質(zhì)故障是最嚴(yán)重的一種故障。
恢復(fù)方法是重裝數(shù)據(jù)庫,然后重做已完成的事務(wù)。具體過程是:
(1)DBA裝入最新的數(shù)據(jù)庫后備副本(離故障發(fā)生時(shí)刻最近的轉(zhuǎn)儲(chǔ)副本),使數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的一致性狀態(tài)。
(2)DBA裝入轉(zhuǎn)儲(chǔ)結(jié)束時(shí)刻的日志文件副本
(3)DBA啟動(dòng)系統(tǒng)恢復(fù)命令,由DBMS完成恢復(fù)功能,即重做已完成的事務(wù)。
*解析
1)我們假定采用的是靜態(tài)轉(zhuǎn)儲(chǔ),因此第(1)步裝入數(shù)據(jù)庫后備副本便可以了。
2)如果采用的是靜動(dòng)態(tài)轉(zhuǎn)儲(chǔ),第(1)步裝入數(shù)據(jù)庫后備副本還不夠,還需同時(shí)裝入轉(zhuǎn)儲(chǔ)開始時(shí)刻的日志文件副本,經(jīng)過處理后才能得到正確的數(shù)據(jù)庫后備副本。
3)第(2)步重做已完成的事務(wù)的算法是:
a. 正向掃描日志文件,找出故障發(fā)生前已提交的事務(wù)的標(biāo)識(shí),將其記入重做隊(duì)列
b. 再一次正向掃描日志文件,對(duì)重做隊(duì)列中的所有事務(wù)進(jìn)行重做處理。即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫。
10. 具有檢查點(diǎn)的恢復(fù)技術(shù)有什么優(yōu)點(diǎn)?
答:
利用日志技術(shù)進(jìn)行數(shù)據(jù)庫恢復(fù)時(shí),恢復(fù)子系統(tǒng)必須搜索日志,確定哪些事務(wù)需要REDO,哪些事務(wù)需要UNDO。一般來說,需要檢查所有日志記錄。這樣做有兩個(gè)問題:
一是搜索整個(gè)日志將耗費(fèi)大量的時(shí)間。
二是很多需要REDO處理的事務(wù)實(shí)際上已經(jīng)將它們的更新操作結(jié)果寫到數(shù)據(jù)庫中了,恢復(fù)子系統(tǒng)又重新執(zhí)行了這些操作,浪費(fèi)了大量時(shí)間。
檢查點(diǎn)技術(shù)就是為了解決這些問題。
11. 試述使用檢查點(diǎn)方法進(jìn)行恢復(fù)的步驟。
答:
① 從重新開始文件中找到最后一個(gè)檢查點(diǎn)記錄在日志文件中的地址,由該地址在日志文件中找到最后一個(gè)檢查點(diǎn)記錄。
② 由該檢查點(diǎn)記錄得到檢查點(diǎn)建立時(shí)刻所有正在執(zhí)行的事務(wù)清單ACTIVE-LIST。
這里建立兩個(gè)事務(wù)隊(duì)列:
· UNDO-LIST: 需要執(zhí)行undo操作的事務(wù)集合;
· REDO-LIST: 需要執(zhí)行redo操作的事務(wù)集合;
把ACTIVE-LIST暫時(shí)放入U(xiǎn)NDO-LIST隊(duì)列,REDO隊(duì)列暫為空。
③ 從檢查點(diǎn)開始正向掃描日志文件
· 如有新開始的事務(wù)Ti,把Ti暫時(shí)放入U(xiǎn)NDO-LIST隊(duì)列;
· 如有提交的事務(wù)Tj,把Tj從UNDO-LIST隊(duì)列移到REDO-LIST隊(duì)列,直到日志文件結(jié)束;
④ 對(duì)UNDO-LIST中的每個(gè)事務(wù)執(zhí)行UNDO操作, 對(duì)REDO-LIST中的每個(gè)事務(wù)執(zhí)行REDO操作。
12. 什么是數(shù)據(jù)庫鏡像?它有什么用途?
答:
數(shù)據(jù)庫鏡像即根據(jù)DBA的要求,自動(dòng)把整個(gè)數(shù)據(jù)庫或者其中的部分關(guān)鍵數(shù)據(jù)復(fù)制到另一個(gè)磁盤上。每當(dāng)主數(shù)據(jù)庫更新時(shí),DBMS自動(dòng)把更新后的數(shù)據(jù)復(fù)制過去,即DBMS自動(dòng)保證鏡像數(shù)據(jù)與主數(shù)據(jù)的一致性。
數(shù)據(jù)庫鏡像的用途有:
一是用于數(shù)據(jù)庫恢復(fù)。當(dāng)出現(xiàn)介質(zhì)故障時(shí),可由鏡像磁盤繼續(xù)提供使用,同時(shí)DBMS自動(dòng)利用鏡像磁盤數(shù)據(jù)進(jìn)行數(shù)據(jù)庫的恢復(fù),不需要關(guān)閉系統(tǒng)和重裝數(shù)據(jù)庫副本。
二是提高數(shù)據(jù)庫的可用性。在沒有出現(xiàn)故障時(shí),當(dāng)一個(gè)用戶對(duì)某個(gè)數(shù)據(jù)加排它鎖進(jìn)行修改時(shí),其他用戶可以讀鏡像數(shù)據(jù)庫上的數(shù)據(jù),而不必等待該用戶釋放鎖。
答案:A
1.文檔型數(shù)據(jù)庫
作為最受歡迎的NoSQL產(chǎn)品,文檔型數(shù)據(jù)庫MongoDB當(dāng)仁不讓地占據(jù)了第一的位置,同時(shí)它也是所有NoSQL數(shù)據(jù)庫中排名最靠前的產(chǎn)品(總排行榜第七名)。Apache基金會(huì)的CouchDB排在第二,基于.Net的數(shù)據(jù)庫RavenDB排在第三,Couchbase排在第四。
2.鍵值(Key-value)數(shù)據(jù)庫
鍵值(Key-value)數(shù)據(jù)庫是NoSQL領(lǐng)域中應(yīng)用范圍最廣的,也是涉及產(chǎn)品最多的一種模型。從最簡單的BerkeleyDB到功能豐富的分布式數(shù)據(jù)庫Riak再到Amazon托管的DynamoDB不一而足。
在鍵值數(shù)據(jù)庫流行度排行中,Redis不出意外地排名第一,它是一款由Vmware支持的內(nèi)存數(shù)據(jù)庫,總體排名第十一。排在第二位的是Memcached,它在緩存系統(tǒng)中應(yīng)用十分廣泛。排在之后的是Riak、BerkeleyDB、SimpleDB、DynamoDB以及甲骨文的Oracle NoSQL數(shù)據(jù)庫。值得注意的是,Oracle NoSQL數(shù)據(jù)庫上榜不久,得分已經(jīng)翻番,上升勢(shì)頭非常迅猛。
3. 列式存儲(chǔ)
列式存儲(chǔ)被視為NoSQL數(shù)據(jù)庫中非常重要的一種模式,其中Cassandra流行度最高,它已經(jīng)由Facebook轉(zhuǎn)交給到Apache進(jìn)行管理,同時(shí)Cassandra在全體數(shù)據(jù)庫排名中排在第十位,緊隨MongoDB成為第二受歡迎的NoSQL數(shù)據(jù)庫?;贖adoop的Hbase排在第二位,Hypertable排在第三。而Google的BigTable并未列入排名,原因是它并未正式公開。