今天這篇文章,我們來聊聊數(shù)據(jù)庫。
█?什么是數(shù)據(jù)庫
對于數(shù)據(jù)庫,大家應(yīng)該都不會覺得陌生。作為重要的基礎(chǔ)軟件,數(shù)據(jù)庫在我們的工作和生活無處不在。
最簡單的,我們電腦里有很多的excel表,其實也可以算是一個“微型數(shù)據(jù)庫”。
從定義上來看,數(shù)據(jù)庫,是一個存放和管理數(shù)據(jù)的倉庫?;蛘哒f,是一個數(shù)據(jù)集合。
那么,我們硬盤上也有大量的數(shù)據(jù),是不是硬盤也是一個數(shù)據(jù)庫呢?
當(dāng)然不是。
硬盤是一個硬件?;谟脖P構(gòu)建的文件系統(tǒng),存儲了大量的數(shù)據(jù),但這些數(shù)據(jù)是以不同類型文件的形式存在的,彼此獨立。
而數(shù)據(jù)庫是一個軟件層面的概念。它對數(shù)據(jù)進行了登記和整理,形成了一個整體系統(tǒng),既包括了數(shù)據(jù),也包括了數(shù)據(jù)之間的邏輯關(guān)系。
簡單來說,如果有一個倉庫,你往里面放了各種類型的物品,例如家具、花草、書籍等。那么,硬盤就像是這個倉庫,文件就是這些物品。
如果你在倉庫里劃分了一個區(qū)域,安排了一個管理員,負責(zé)存放物品并進行登記。那么,這個區(qū)域(這套體系),就是數(shù)據(jù)庫。
廣義的數(shù)據(jù)庫,是一種數(shù)據(jù)集合。我們口頭上所說的數(shù)據(jù)庫(狹義),大部分是指那些用于搭建、使用和維護廣義數(shù)據(jù)庫的系統(tǒng)軟件,叫做數(shù)據(jù)庫管理系統(tǒng)(DBMS)。
數(shù)據(jù)庫管理系統(tǒng)對數(shù)據(jù)進行統(tǒng)一控制管理,以保證數(shù)據(jù)的完整性和安全性。它還具有對外的標(biāo)準(zhǔn)接口,方便其它應(yīng)用軟件對數(shù)據(jù)進行讀寫操作。
我們比較熟悉的數(shù)據(jù)庫管理系統(tǒng),包括MySQL、SQL Server、Oracle、DB2、Redis、MongoDB等。
█?數(shù)據(jù)庫的作用和優(yōu)勢
之所以要有數(shù)據(jù)庫,主要是為了方便管理和使用數(shù)據(jù)。
數(shù)據(jù)庫是信息時代最重要的基礎(chǔ)軟件之一,地位僅次于操作系統(tǒng)。
如今,大量的信息化系統(tǒng)遍布社會的每個角落,每時每刻都在產(chǎn)生海量的數(shù)據(jù)。如果沒有一個高效的系統(tǒng)和平臺對這些數(shù)據(jù)進行統(tǒng)一管理,那么,效率就會下降。
數(shù)據(jù)庫存儲了海量的多類型數(shù)據(jù)。用戶可以通過數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)、查找數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)、分析數(shù)據(jù)、共享數(shù)據(jù)。
對于個人、企業(yè)甚至國家部門,數(shù)據(jù)庫有著不可替代的作用?,F(xiàn)在整個社會都在講數(shù)據(jù)價值挖掘。AI的三大要素里,也包括了數(shù)據(jù)。數(shù)據(jù)的價值在提升,數(shù)據(jù)庫的價值也隨之提升。
一個優(yōu)秀的數(shù)據(jù)庫管理系統(tǒng),需要具備以下幾個方面的優(yōu)勢。
首先,是性能。
數(shù)據(jù)庫涉及到大量的數(shù)據(jù)讀寫操作,所以,性能就顯得非常重要。
如果數(shù)據(jù)庫的用戶少,問題倒是不大。但是如果用戶多,例如12306、淘寶雙11等場景,瞬時并發(fā)讀寫特別大,就要看數(shù)據(jù)庫是否能hold得住。
這里就要提到著名的ACID(原子性、一致性、隔離性、持久性)特性。
原子性(Atomicity):為避免糾紛,數(shù)據(jù)庫中的事務(wù)執(zhí)行被視作原子不可再分,事務(wù)(例如轉(zhuǎn)賬)中的操作要么全部執(zhí)行,要么失敗回滾(Rollback)。
一致性(Consistency):為保證業(yè)務(wù)邏輯的一致性,數(shù)據(jù)庫通過設(shè)置約束和觸發(fā)器來保證其完整性約束不被破壞,即每個事務(wù)能夠看到的數(shù)據(jù)總是保持一致。
隔離性(Isolation):為防止事務(wù)之間的臟讀、幻讀、不可重復(fù)讀,數(shù)據(jù)庫通過加鎖,保證多個事務(wù)并發(fā)訪問時,事務(wù)之間是隔離的,互不干擾。
持久性(Durability):為防止意外事故(例如斷電)導(dǎo)致數(shù)據(jù)缺失,數(shù)據(jù)庫保證事務(wù)對其所作的修改被永久保存,不會被回滾。
其次,是容量。
數(shù)據(jù)庫要存放數(shù)據(jù),所以,容量要滿足設(shè)計需求。
現(xiàn)在業(yè)務(wù)需求變化很快,數(shù)據(jù)庫的數(shù)據(jù)很可能迅猛增長。所以,數(shù)據(jù)庫也需要具備一定的擴展性和彈性,能夠靈活地變大或者變小,滿足需求和成本之間的平衡。
第三,是安全性。
數(shù)據(jù)安全的重要性,無需多言。一個優(yōu)秀的數(shù)據(jù)庫,需要擁有完善的安全機制,保護數(shù)據(jù)免受未授權(quán)的訪問,以及來自外部的攻擊。
數(shù)據(jù)庫也需要有完善的備份和恢復(fù)機制,在極端情況下,能夠快速恢復(fù)到最近的狀態(tài)。
第四,是兼容性。
數(shù)據(jù)庫需要遵循開放標(biāo)準(zhǔn)的API,使得自身更容易與其它應(yīng)用和服務(wù)集成,促進數(shù)據(jù)共享和互操作性。
總之,數(shù)據(jù)庫的作用遠不止于簡單的數(shù)據(jù)存放。作為一個核心組件,它必須經(jīng)過嚴(yán)格且縝密的設(shè)計,能夠為各類應(yīng)用程序提供穩(wěn)定可靠的支撐,保障數(shù)據(jù)的安全性、完整
性和高效利用。
█ 數(shù)據(jù)庫的類別
接下來,我們再看看數(shù)據(jù)庫的類別。
數(shù)據(jù)庫的種類很多,分類方法也很多。我們不妨就以歷史時間線的維度,對幾種主要的分類方式進行介紹。
1960-1970:萌芽階段
上世紀(jì)60年代,隨著計算機技術(shù)的不斷發(fā)展和成熟,越來越多的大型機開始應(yīng)用于金融證券、航空航天、工業(yè)制造、軍事國防等領(lǐng)域,掀起了一場信息化革命。
有了信息化,就催生了大量的數(shù)據(jù)。為了更好地管理這些數(shù)據(jù),就有人開始提出數(shù)據(jù)庫系統(tǒng)的概念。
1961年,美國通用電氣公司的查爾斯·巴赫曼(Charles Bachman),成功開發(fā)出世界上第一個數(shù)據(jù)庫管理系統(tǒng)——IDS(IntegratedData Store,集成數(shù)據(jù)存儲),奠定了網(wǎng)狀數(shù)據(jù)庫的基礎(chǔ),并在當(dāng)時得到了廣泛的發(fā)行和應(yīng)用。
1968年,IBM公司創(chuàng)建了層次式數(shù)據(jù)庫管理系統(tǒng)IMS(Information Management System),是世界上首個商業(yè)數(shù)據(jù)庫系統(tǒng)。
1970-2000:關(guān)系型、事務(wù)型數(shù)據(jù)庫
又過了兩年,到了1970年,IBM公司的研究員埃德加·弗蘭克·科德(Edgar Frank Codd)發(fā)表了一篇名為《大型共享數(shù)據(jù)庫數(shù)據(jù)的關(guān)系模型》的重磅論文。在論文中,他提出了數(shù)據(jù)庫的關(guān)系模型,開創(chuàng)了關(guān)系數(shù)據(jù)庫時代。
1973年,IBM啟動了System R項目。后來,在System R項目的基礎(chǔ)上,加利福尼亞大學(xué)柏克萊分校啟動了ingres項目。
這兩個項目的意義極為重大。1970-80年代出現(xiàn)的多個經(jīng)典數(shù)據(jù)庫產(chǎn)品,包括Oracle、DB2、Informix、Sybase、SQL Server,都是基于System R和ingres項目衍生出來的。這些數(shù)據(jù)庫產(chǎn)品,極大地助力了當(dāng)時的信息化浪潮,為計算機的普及發(fā)揮了重要作用。
剛才提到的這些數(shù)據(jù)庫產(chǎn)品,全部都是關(guān)系型數(shù)據(jù)庫。
數(shù)據(jù)庫有很多種模型。比較原始的,是層次模型和網(wǎng)狀模型。比較主流的,是關(guān)系模型和非關(guān)系模型。
關(guān)系模型的最大特點,就是可以使用表格來表示實體和實體之間的關(guān)系。每一行代表一個實體實例,每一列代表實體的一個屬性。
關(guān)系型數(shù)據(jù)庫中,每個表有唯一的名字。表的每一行代表了一組值之間的聯(lián)系,稱為元組(Tuple)。每一列是實體的描述,具有相同的數(shù)據(jù)類型,稱為屬性(Attribute)或者字段(Field)。
大家應(yīng)該注意到了,很多關(guān)系型數(shù)據(jù)庫(包括SQL Server、MySQL、PostgreSQL),都有一個SQL。
SQL的意思,是Structured Query Language,結(jié)構(gòu)化查詢語言。
這是一種用于訪問和處理“關(guān)系型數(shù)據(jù)庫”的標(biāo)準(zhǔn)計算機語言。SQL語句既可以查詢數(shù)據(jù)庫中的數(shù)據(jù),也可以添加、更新和刪除數(shù)據(jù)庫中的數(shù)據(jù),還可以對數(shù)據(jù)庫進行管理和維護操作。
例如,下面這個,就是一個典型的SQL命令,表示要插入一條數(shù)據(jù):
INSERT INTO students (id, name, age) VALUES (1, '張三', 20);
80-90年代的主流數(shù)據(jù)庫,除了基本屬于關(guān)系型數(shù)據(jù)庫之外,在業(yè)務(wù)類型上,也屬于事務(wù)型數(shù)據(jù)庫(交易型數(shù)據(jù)庫),即OLTP(Online Transactional Processing)。
這類數(shù)據(jù)庫主要用于管理實時交易(銀行、電商、訂票等),主要特點是能夠支持大量的讀寫操作(簡短的、小規(guī)模),能夠確保數(shù)據(jù)庫的完整性和一致性。
2000-2010:非關(guān)系型、分析型數(shù)據(jù)庫
上世紀(jì)90年代末,數(shù)據(jù)庫的發(fā)展進入一個新的階段。非關(guān)系型數(shù)據(jù)庫開始崛起。
1998年,卡羅·斯特羅茲(Carlo Strozzi)開發(fā)了一個輕量、開源、不提供SQL功能的數(shù)據(jù)庫,即NoSQL。
值得一提的是,NoSQL并不是“No SQL”(拒絕SQL)意思,而是“Not Only SQL”(不只是SQL)。
NoSQL并非完全替代關(guān)系型數(shù)據(jù)庫,而是為了應(yīng)對Web 2.0時代互聯(lián)網(wǎng)應(yīng)用快速增長所帶來的挑戰(zhàn)。它針對不同的應(yīng)用場景,提供了更多選擇。
非關(guān)系數(shù)據(jù)模型并不遵循傳統(tǒng)的關(guān)系數(shù)據(jù)庫模型及其SQL查詢語言。它的出現(xiàn),能夠解決關(guān)系型數(shù)據(jù)庫在擴展性和靈活性方面的一些局限性。
非關(guān)系型數(shù)據(jù)庫包括了很多子類型,例如鍵值數(shù)據(jù)庫、列族數(shù)據(jù)庫、文檔數(shù)據(jù)庫、圖數(shù)據(jù)庫等。具體類型和典型產(chǎn)品如下:
除了非關(guān)系型數(shù)據(jù)庫之外,數(shù)據(jù)庫也從事務(wù)性向分析型發(fā)展,即OLAP(Online Analytical Processing)。
這也是由時代決定的。因為數(shù)據(jù)除了用于查詢和記錄之外,要開始為大數(shù)據(jù)、數(shù)據(jù)分析等新興業(yè)務(wù)服務(wù)。
分析型數(shù)據(jù)庫允許用戶對大量歷史數(shù)據(jù)進行復(fù)雜的查詢和分析,以揭示隱藏在數(shù)據(jù)中的模式和趨勢,為上層決策提供支持。
需要注意的是,那一時期,數(shù)據(jù)倉庫(Data Warehouse)的概念出現(xiàn)了。
所謂數(shù)據(jù)倉庫,就是數(shù)據(jù)庫的一種演進。它集成了來自不同來源的數(shù)據(jù),并經(jīng)過清洗、轉(zhuǎn)換和整合,以便于進行高效的數(shù)據(jù)分析和報告。
限于篇幅,關(guān)于數(shù)據(jù)倉庫和待會提到的數(shù)據(jù)湖,小棗君后續(xù)會專門介紹。
2010-現(xiàn)在:融合、云化、AI、國產(chǎn)
2010年之后,數(shù)據(jù)庫技術(shù)繼續(xù)蓬勃發(fā)展,出現(xiàn)了很多新的趨勢。
首先,繼SQL、NoSQL之后,又出現(xiàn)了NewSQL的概念。
NewSQL是一類新型的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),結(jié)合了SQL和NoSQL的優(yōu)點。
它解決了傳統(tǒng)關(guān)系型數(shù)據(jù)庫在處理大規(guī)模數(shù)據(jù)和高并發(fā)訪問時的性能瓶頸,同時保留ACID特性以及對SQL查詢語言的支持,非常適用于需要處理大規(guī)模數(shù)據(jù)和高并發(fā)訪問的場景。
NewSQL的代表產(chǎn)品,包括Google Spanner、CockroachDB、TiDB等。
其次,繼事務(wù)性、分析型之后,出現(xiàn)了混合型數(shù)據(jù)庫(HTAP,Hybrid Transactional / Analytical Processing)。
這也是一種融合趨勢。
簡單來說,HTAP是結(jié)合了OLTP和OLAP的優(yōu)點。它是一種新興的數(shù)據(jù)庫架構(gòu),能夠同時支撐OLTP和OLAP場景,避免傳統(tǒng)架構(gòu)中大量數(shù)據(jù)交互造成的資源浪費和沖突。
第三,是云數(shù)據(jù)庫和分布式數(shù)據(jù)庫的崛起。
這個比較好理解。以前都是單機數(shù)據(jù)庫。后來,數(shù)據(jù)庫并發(fā)越來越大,對安全要求越來越高,就有了主從數(shù)據(jù)庫,再然后,就是分布式數(shù)據(jù)庫。
分布式數(shù)據(jù)庫,數(shù)據(jù)分布在多臺服務(wù)器上,通過網(wǎng)絡(luò)連接協(xié)同工作。這樣一來,既可以擴展存儲和處理能力,也可以提高系統(tǒng)的可用性和容錯性。
當(dāng)然,分布式數(shù)據(jù)庫,管理和維護方面會更復(fù)雜一些。
云數(shù)據(jù)庫,是響應(yīng)云計算的發(fā)展,把本地數(shù)據(jù)庫遷移到云端。
第四,繼數(shù)據(jù)倉庫之后,又出現(xiàn)了數(shù)據(jù)湖、湖倉一體。
限于篇幅,后續(xù)專門給大家介紹這幾個概念。
第五,是數(shù)據(jù)庫開始引入AI,走向智能化。
將AI人工智能引入數(shù)據(jù)庫,也是一個重要趨勢。
AI能發(fā)揮的作用很多。一方面,可以實現(xiàn)更高的查詢和存儲效率,并自動化處理各種任務(wù)。另一方面,可以分析大量數(shù)據(jù)記錄,標(biāo)記異常值和異常模式,自動防范惡意訪問與攻擊,提升安全性。
除此之外,AI還可以主動實現(xiàn)數(shù)據(jù)庫的智能調(diào)優(yōu),提升數(shù)據(jù)庫的整體性能。或者,自動進行系統(tǒng)維護操作,減少運營維護成本,也避免人為錯誤。
第六,是國產(chǎn)數(shù)據(jù)庫替代的加速。
最近十多年,國產(chǎn)數(shù)據(jù)庫的發(fā)展速度極快。在信創(chuàng)戰(zhàn)略的推動下,越來越多的國內(nèi)企業(yè)和政府部門開始啟用國產(chǎn)數(shù)據(jù)庫,進行國產(chǎn)化替代。
█ 結(jié)語
好啦,以上就是關(guān)于數(shù)據(jù)庫的基本介紹。
數(shù)據(jù)是21世紀(jì)最有價值的無形資產(chǎn)。存儲和利用數(shù)據(jù),對每個人、每個企業(yè)、每個政府都意義重大。像數(shù)據(jù)庫、數(shù)據(jù)倉庫、數(shù)據(jù)湖這樣的數(shù)據(jù)平臺,是充分利用數(shù)據(jù)價值的前提,也是發(fā)展AI的前提。
相信未來幾年,數(shù)據(jù)庫技術(shù)還將保持高速發(fā)展,涌現(xiàn)出更多的創(chuàng)新。