新聞中心
隨著信息化時(shí)代的到來(lái),企業(yè)面臨的數(shù)據(jù)管理問(wèn)題愈加迫切。數(shù)據(jù)庫(kù)將數(shù)據(jù)存儲(chǔ)在一個(gè)地方,并提供訪問(wèn)該數(shù)據(jù)的機(jī)制,是解決數(shù)據(jù)管理問(wèn)題的有效手段。不同的應(yīng)用場(chǎng)景和需求,需要采用不同的數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法。本文將介紹幾種常見的數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法及其特點(diǎn)。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到東港網(wǎng)站設(shè)計(jì)與東港網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋東港地區(qū)。
1.關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系型數(shù)據(jù)庫(kù)是傳統(tǒng)數(shù)據(jù)庫(kù)的代表,以關(guān)系型數(shù)據(jù)模型為基礎(chǔ),其數(shù)據(jù)的組織形式為二維表格。每個(gè)表格包含行和列,行表示記錄,列表示字段。關(guān)系型數(shù)據(jù)庫(kù)具有數(shù)據(jù)結(jié)構(gòu)清晰、數(shù)據(jù)關(guān)系處理、數(shù)據(jù)隔離可靠等優(yōu)點(diǎn)。關(guān)系型數(shù)據(jù)庫(kù)最著名的是Oracle、MySQL和Microsoft SQL Server等。
2.面向?qū)ο髷?shù)據(jù)庫(kù)
面向?qū)ο髷?shù)據(jù)庫(kù)是以面向?qū)ο缶幊汤碚摓榛A(chǔ),旨在更好地支持對(duì)象的存儲(chǔ)和處理。在面向?qū)ο髷?shù)據(jù)庫(kù)中,數(shù)據(jù)被組織成對(duì)象,每個(gè)對(duì)象都有一個(gè)唯一的標(biāo)識(shí)符和自己的屬性。面向?qū)ο髷?shù)據(jù)庫(kù)具有靈活性強(qiáng)、可擴(kuò)展性好等優(yōu)點(diǎn)。面向?qū)ο髷?shù)據(jù)庫(kù)最經(jīng)典的代表是ObjectDB。
3.文檔數(shù)據(jù)庫(kù)
文檔數(shù)據(jù)庫(kù)是一種非結(jié)構(gòu)化的數(shù)據(jù)庫(kù),基于文檔存儲(chǔ)數(shù)據(jù),尤其是半結(jié)構(gòu)化數(shù)據(jù)。文檔數(shù)據(jù)庫(kù)具有靈活性強(qiáng)、數(shù)據(jù)模型相對(duì)簡(jiǎn)單、數(shù)據(jù)存儲(chǔ)格式與數(shù)據(jù)結(jié)構(gòu)相互獨(dú)立等優(yōu)點(diǎn)。MongoDB是一種著名的文檔數(shù)據(jù)庫(kù)。
4.圖形數(shù)據(jù)庫(kù)
圖形數(shù)據(jù)庫(kù)以節(jié)點(diǎn)和邊為元素進(jìn)行模型化,旨在提供處理與節(jié)點(diǎn)及其之間關(guān)系的數(shù)據(jù)的功能。圖形數(shù)據(jù)庫(kù)主要應(yīng)用于社交、推薦和物聯(lián)網(wǎng)等領(lǐng)域。圖形數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)在于查詢速度快,代碼可讀性好。Neo4j是一種著名的圖形數(shù)據(jù)庫(kù)。
5.列式數(shù)據(jù)庫(kù)
列式數(shù)據(jù)庫(kù)是一種特殊的數(shù)據(jù)庫(kù),以列為基本存儲(chǔ)單元。相較于傳統(tǒng)的行式數(shù)據(jù)庫(kù),列式數(shù)據(jù)庫(kù)可用搜索更快的速度在大型數(shù)據(jù)集中查找特定的數(shù)據(jù)。列式數(shù)據(jù)庫(kù)的應(yīng)用包括在線分析處理、事件日志、定時(shí)記賬等領(lǐng)域。HBase和Cassandra是著名的列式數(shù)據(jù)庫(kù)。
綜合來(lái)看,數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法各有優(yōu)缺點(diǎn),不同的應(yīng)用場(chǎng)景需要采用不同的數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法。企業(yè)在數(shù)據(jù)庫(kù)實(shí)現(xiàn)中需要根據(jù)實(shí)際需求評(píng)估和選擇適合自己的數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法,從而為數(shù)據(jù)的管理和應(yīng)用提供穩(wěn)固的支撐。
相關(guān)問(wèn)題拓展閱讀:
- 數(shù)據(jù)庫(kù)事務(wù)原子性,一致性是怎樣實(shí)現(xiàn)的
- 數(shù)據(jù)庫(kù)的實(shí)現(xiàn)原理和數(shù)據(jù)結(jié)構(gòu),是怎樣的呢
數(shù)據(jù)庫(kù)事務(wù)原子性,一致性是怎樣實(shí)現(xiàn)的
這個(gè)問(wèn)題的有趣之處,不在于問(wèn)題本身(“原子性、一致性的實(shí)現(xiàn)機(jī)制是什么”),而在于回答者的分歧反映出來(lái)的另外一個(gè)問(wèn)題:原子性和一致性之間的關(guān)系是什么?
我特別關(guān)注了@我練功發(fā)自真心
的答案,他正確地指出了,為了保證事務(wù)操作的原子性,必須實(shí)現(xiàn)基于日志的REDO/UNDO機(jī)制。但這個(gè)答案仍然是不完整的,因?yàn)樵有圆⒉荒軌蛲耆WC一致性。
按照我個(gè)人的理解,在事務(wù)處理的ACID屬性中,一致性是最基本的屬性,其它的三個(gè)屬性都為了保證一致性而存在的。
首先回顧一下一致性的定義。所謂一致性,指的是數(shù)據(jù)處于一種有意義的狀態(tài),這種狀態(tài)是語(yǔ)義上的而不是語(yǔ)法上的。最常見的例子是轉(zhuǎn)帳。例如從帳戶A轉(zhuǎn)一筆錢到帳戶B上,如果帳戶A上的錢減少了,而帳戶B上的錢卻沒有增加,那么我們認(rèn)為此時(shí)數(shù)據(jù)處于不一致的狀態(tài)。
在
數(shù)據(jù)冊(cè)纖段庫(kù)實(shí)現(xiàn)的場(chǎng)景中,一致性可以分為數(shù)據(jù)庫(kù)外部的一致性和數(shù)據(jù)庫(kù)內(nèi)部的一致性。前者由外部應(yīng)用的編碼來(lái)保證,即某個(gè)應(yīng)用在執(zhí)行轉(zhuǎn)帳的數(shù)據(jù)庫(kù)操作時(shí),必須在
同一個(gè)事務(wù)內(nèi)部調(diào)用對(duì)帳戶A和帳戶B的操作。如果在這個(gè)層次出現(xiàn)錯(cuò)誤,這不是數(shù)據(jù)庫(kù)本身能夠解決的,也不屬于我們需要討論的范圍。后者由數(shù)據(jù)庫(kù)來(lái)保證,即
在同一個(gè)事務(wù)內(nèi)部的一組操作必須全部執(zhí)行成功(或者全部失敗)。這就是事務(wù)處理的原子性。
為了實(shí)現(xiàn)原子性,需要通過(guò)日志:將所有對(duì)
數(shù)據(jù)的更新操作都寫入日志,如果一個(gè)事務(wù)中的一部分操作已經(jīng)成功,但以后的操作,由于斷電/系統(tǒng)崩潰/其它的軟硬件錯(cuò)誤而無(wú)法繼續(xù),則通過(guò)回溯日志,將已
經(jīng)執(zhí)行成功的操作撤銷,從而達(dá)到“全部操作失敗”的目的。最常見的場(chǎng)景是,數(shù)據(jù)庫(kù)系統(tǒng)崩潰后重啟,此時(shí)數(shù)據(jù)庫(kù)處于不一致的狀態(tài),必須先執(zhí)行一個(gè)crash
recovery的過(guò)程:讀取日志進(jìn)行REDO(重演將所有已經(jīng)執(zhí)行成功但尚未寫入到磁盤的操作,保證持久性),再對(duì)所有到崩潰時(shí)尚未成功提交的事務(wù)進(jìn)行
UNDO(撤銷所有執(zhí)行了一部分但尚未提交的操作,保證原子性)。crash
recovery結(jié)束后,數(shù)據(jù)庫(kù)恢復(fù)到一致性狀態(tài),可以繼續(xù)被使用。
日志的管理和重演是數(shù)據(jù)庫(kù)實(shí)現(xiàn)中最復(fù)雜的部分之一。如果涉及到并行處理和分布式系統(tǒng)(日志的復(fù)制和重演是數(shù)據(jù)庫(kù)高可用性的基礎(chǔ)),會(huì)比上述場(chǎng)景還要復(fù)雜得多。
但是,原子性并不能完全保證一致性。在多個(gè)事務(wù)并行進(jìn)行的情況下,即使保證了每一個(gè)事務(wù)的原子性,仍然可能導(dǎo)致數(shù)據(jù)不一致的結(jié)果。例如,事務(wù)1需要將100元轉(zhuǎn)入帳號(hào)A:先讀取帳號(hào)A的值,然后在這個(gè)值上加上100。但是,在這兩個(gè)操作之間,另一個(gè)事務(wù)2修改了帳號(hào)A的值,為它增加了100元。那么最后的結(jié)果應(yīng)該是A增加了200元。但事實(shí)上,
事務(wù)1最終完成后,帳號(hào)A只增加了100元,因?yàn)槭聞?wù)2的修改結(jié)果被事務(wù)1覆蓋掉了。
為了保證并況下的一致性,引入了隔離性,即保證每一個(gè)事務(wù)能夠看到的數(shù)據(jù)總是一致的,就好象其它并發(fā)事務(wù)并不存在一樣。用術(shù)語(yǔ)來(lái)說(shuō),就州譽(yù)是多個(gè)事務(wù)并發(fā)執(zhí)行后的狀態(tài),和它們串行執(zhí)行后的狀態(tài)是等價(jià)的。怎樣實(shí)現(xiàn)隔離性,已經(jīng)有很多人回答過(guò)了,原則上無(wú)非是兩種類型的鎖:
一
種是悲觀鎖,即當(dāng)前事務(wù)將所有涉及操作的對(duì)象加鎖,操作完成豎笑后釋放給其它對(duì)象使用。為了盡可能提高性能,發(fā)明了各種粒度(數(shù)據(jù)庫(kù)級(jí)/表級(jí)/行級(jí)……)/各
種性質(zhì)(共享鎖/排他鎖/共享意向鎖/排他意向鎖/共享排他意向鎖……)的鎖。為了解決死鎖問(wèn)題,又發(fā)明了兩階段鎖協(xié)議/死鎖檢測(cè)等一系列的技術(shù)。
一種是樂觀鎖,即不同的事務(wù)可以同時(shí)看到同一對(duì)象(一般是數(shù)據(jù)行)的不同歷史版本。如果有兩個(gè)事務(wù)同時(shí)修改了同一數(shù)據(jù)行,那么在較晚的事務(wù)提交時(shí)進(jìn)行沖突
檢測(cè)。實(shí)現(xiàn)也有兩種,一種是通過(guò)日志UNDO的方式來(lái)獲取數(shù)據(jù)行的歷史版本,一種是簡(jiǎn)單地在內(nèi)存中保存同一數(shù)據(jù)行的多個(gè)歷史版本,通過(guò)時(shí)間戳來(lái)區(qū)分。
鎖也是數(shù)據(jù)庫(kù)實(shí)現(xiàn)中最復(fù)雜的部分之一。同樣,如果涉及到分布式系統(tǒng)(分布式鎖和兩階段提交是分布式事務(wù)的基礎(chǔ)),會(huì)比上述場(chǎng)景還要復(fù)雜得多。
@
我練功發(fā)自真心
提到,其他回答者說(shuō)的其實(shí)是操作系統(tǒng)對(duì)atomic的理解,即并發(fā)控制。我不能完全同意這一點(diǎn)。數(shù)據(jù)庫(kù)有自己的并發(fā)控制和鎖問(wèn)題,雖然在原理上和操作系統(tǒng)
中的概念非常類似,但是并不是同一個(gè)層次上的東西。數(shù)據(jù)庫(kù)中的鎖,在粒度/類型/實(shí)現(xiàn)方式上和操作系統(tǒng)中的鎖都完全不同。操作系統(tǒng)中的鎖,在數(shù)據(jù)庫(kù)實(shí)現(xiàn)中
稱為latch(一般譯為閂)。其他回答者回答的其實(shí)是“在并行事務(wù)處理的情況下怎樣保證數(shù)據(jù)的一致性”。
最后回到原來(lái)的問(wèn)題(“原子性、一致性的實(shí)現(xiàn)機(jī)制是什么”)。我手頭有本Database
System
Concepts(4ed,有點(diǎn)老了),在第15章的開頭簡(jiǎn)明地介紹了ACID的概念及其關(guān)系。如果你想從概念上了解其實(shí)現(xiàn),把這本書的相關(guān)章節(jié)讀完應(yīng)該能大概明白。如果你想從實(shí)踐上了解其實(shí)現(xiàn),可以找innodb這樣的開源引擎的源代碼來(lái)讀。不過(guò),即使是一個(gè)非常粗糙的開源實(shí)現(xiàn)(不考慮太復(fù)雜的并行處理,不考慮分布式系統(tǒng),不考慮針對(duì)操作系統(tǒng)和硬件的優(yōu)化之類),要基本搞明白恐怕也不是一兩年的事。
數(shù)據(jù)庫(kù)的實(shí)現(xiàn)原理和數(shù)據(jù)結(jié)構(gòu),是怎樣的呢
那區(qū)別大了,根本就是兩門課,學(xué)的東西完全不一樣。
應(yīng)該這么說(shuō)吧:數(shù)據(jù)庫(kù)可以說(shuō)是一門工具,學(xué)來(lái)就可以用;而數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)專業(yè)的基礎(chǔ)課程。如果你要搞軟件編程,那么就應(yīng)該學(xué)數(shù)據(jù)結(jié)構(gòu)。
根據(jù)我學(xué)過(guò)的感覺,數(shù)據(jù)結(jié)構(gòu)應(yīng)該比較簡(jiǎn)單點(diǎn),不過(guò)不同的人應(yīng)該感覺不同吧!
呵呵
關(guān)于數(shù)據(jù)庫(kù)實(shí)現(xiàn)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)頁(yè)題目:數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法簡(jiǎn)介(數(shù)據(jù)庫(kù)實(shí)現(xiàn))
文章轉(zhuǎn)載:http://fisionsoft.com.cn/article/cospsej.html


咨詢
建站咨詢
