tft每日頭條

 > 科技

 > 真正的數據庫

真正的數據庫

科技 更新时间:2024-06-12 19:24:28

數據庫的發展基本上也是伴随着計算機技術經曆了40年的曆史,從最初的文件系統上的文件,到有結構的層次和網狀數據庫,一直到今天被廣泛使用的關系型數據庫。随着互聯網和物聯網行業的興起,數據量飛速增長,對大數據的采集、存儲和應用是每個數據庫必備的技能。現在大多數應用都是數據存儲密集型,而不是計算密集型。

數據存儲發展

衆所周知,文明的發展離不開信息的積累,而任何東西的積累離不開存儲。因此,信息存儲是文明發展的重要環節,從某種意義上講,甚至可以說是人類邁入文明社會的标志之一。在曆史上,人類曾經創造過很多信息存儲的方法。我們一起來看下存儲發展曆程。

古老的東方開始使用甲骨文記錄着自己的數據。

真正的數據庫(聊聊數據庫)1

到了東漢,人們開始用紙張記錄數據。紙的出現使得信息的記錄、傳播和繼承,有了革命性的進步,促進了人類文化的傳播。同時紙也為後來打孔卡的出現奠定了基礎。

真正的數據庫(聊聊數據庫)2

到了近代有了打孔卡、磁帶、軟磁盤(記得小時候初中一年級見到的電腦好像是這種存儲)、硬盤。以前大學上計算機課,總是聽老師講以前的U盤都是幾M的,現在的U盤都有上百G的,而且很便宜。

存儲現在發展的已經很快,現在存儲數據很廉價。而數據庫的必備功能就是存儲數據。

傳統的數據庫

傳統的關系型數據庫大家都接觸的比較多,比如常見的Oracle、MySQL、PostgreSQL。數據庫中每個屬性都有特性的類型來定義,可以把數據想象成一個個表格存儲着。和我們記錄數據的認知非常相似,一行行記錄着信息。

真正的數據庫(聊聊數據庫)3

例如學生表裡一條記錄,就是一個學生他的屬性描述,包括年齡、性别、出生年月日、所屬班級等。但班級也有它的更詳細的屬性,那就可以在學生表裡增加一個關系字段來表示該學生所屬的班級索引,通過索引連接到班級表,可以查到這個班級的年級、班主任、學生人數等信息。

NoSQL數據庫

随着移動互聯網時代的到來,需要存儲的數據量越來越大,對機器的擴展要求成為了數據庫的必備技能,這也是傳統數據庫的弱點,比如Oracle在做集群是很有限的。NoSQL對于數據庫的擴展和高可用是它的強項。

那為什麼NoSQL能夠有可擴展和高可用呢?

我們都知道CAP理論,CAP理論指的是一個分布式系統最多隻能同時滿足一緻性(Consistency)、可用性(Availability)和分區容錯性(Partition tolerance)這三項中的兩項。

真正的數據庫(聊聊數據庫)4

分布式系統的一緻性通常稱為ACID,即原子性、一緻性、隔離性、永久性,傳統的關系型數據庫都能做到。簡單的你可以理解一緻性為數據寫入數據庫中,後續讀取是否能立刻讀取到更新的最新值。

另外,我們可以看到大多數NoSQL數據庫都是“弱一緻性”的,強調的是“最終一緻性”,可以理解為如果你停止向數據庫寫入數據,并等待一段不确定的時間,那麼最終所有的讀取請求都會返回相同的值。換句話說,不一緻性是暫時的,最終會解決。通過讓系統放松對某一時刻數據一緻性的要求來換取系統整體伸縮性和性能上改觀。顯然,NoSQL大都是用一緻性來換取了可用性和分區容錯性。那麼犧牲一緻性到底值不值得呢?舉個例子,淘寶雙十一當天,對于商品的評論和訪問數可能不需要那麼在意,首要是要保證服務器的高可用,崩了什麼都白搭了!

新型數據庫

在實際的應用中,存在一種場景,我們要求數據庫必須保證ACID和高可用性,于是一批新型的數據庫誕生了,比如螞蟻金服的OcenBase和最近的“新晉網紅”數據庫TiDB。他們看似近乎完美的支持的分布式一緻性和高可用性,支持标準SQL,對傳統的關系型數據庫提供遷移兼容方案。

還有一個數據庫可以關注下,Vertica。很多人把Vertica劃分到傳統關系型數據庫中,但是他與傳統型關系庫又有不同:

  • Vertica是面向分析的而不是面向事務的,他的強項在于OLAP場景,對大量數據的讀取和聚合表現強悍!
  • Vertica是基于列存儲的,列存儲讓數據的分割查詢變的更加靈活

Vertica并不是一個廣泛應用的數據庫,我們上面提到了CAP理論,提到所有數據庫不能同時滿足“三性”,但是對于特性的應用場景設計,就能很大程度上在“三性”上取得平衡。

Vertica的原型稱為“C-Store”,C-Store最早是2005年學術界的一個項目,作者是2015年圖靈獎獲得者 Mike Stonebraker,同時也是Vertica的創辦者。

論文總結一下三點:

  • 數據庫的查詢瓶頸是在IO上,而不是在CPU上,那麼用CPU時間交換磁盤帶寬是有意義的。一般有兩種途徑用CPU時間交換磁盤帶寬。第一種方法是采用高效的編碼技術,比如存儲一個客戶的住址,可以用6bits來編碼所有的US州名,如果采用州名縮寫,則需要16bits;如果用全稱則更多。第二種方法是濃縮存儲的數據,比如把N個數據,每個K bits,直接打包成N*K bits。
  • 在物理上存儲列的集合,每個集合都按照一些屬性來排序。以同一個屬性進行排序的列,組成projections。
  • 讀寫優化,構建WOS和ROS組件,用tuple mover聯系它們

真正的數據庫(聊聊數據庫)5

C-Store 應該是第一個将列存技術在實際系統中實現出來的,比Google的BigTable要早(公衆号回複“列存儲”,可下載C-Store和BigTable論文)。

我們怎麼用數據庫

其實以前的一些經典理論還是很有道理的,比如CAP、比如Raft呀,各個數據庫還都是“術業有專攻”,别老想着用一種數據庫打天下。比如,核心系統的事務數據還是選擇使用MySQL或者postgreSQL。分析性數據庫還是選擇Vertica或者Greenplum。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved