2000年之後資料庫的發展歷史怎樣?
忘記說了,就放在最前邊,在大家忙著研究怎樣的分散式通信演算法可以解決分散式事務問題的時候,google spanner用原子鐘和Truetime API解決分散式transaction的思路簡直驚艷
Spanner is able to provide strongly consistent snapshots across the entire database using a Google-developed technology called TrueTime. … it is an API that allows any machine in Google datacenters to know the exact global time with a high degree of accuracy (that is, within a few milliseconds). This allows different Spanner machines to reason about the ordering of transactional operations (and have that ordering match what the client has observed) often without any communication at all.
堪稱工業界的降維打擊…
---------------------原答案------------------------
- Document 模型興起,被Object/Relation mismatch折磨的死去活來的SDE終於可以大大方方的Denormalization了。什麼第一第二第三第四範式都見鬼吧 =_=
- B樹家族不再一家獨大,SSTables和LSM-Trees興起
- 相對於compound index,更靈活的interleave index/key 應用於spanner,redshift等資料庫
- Serializable Snapshot Isolation (SSI) 開始應用應用於PostgreSQL,FoundationDB,支持樂觀並發而非單線程一個一個transaction執行的Serializable隔離等級實現你怕不怕!
- Column-Oriented Storage興起,比如我司的redshift
- 分散式資料庫興起,其中,以基於BigTable的HBase,和基於Dynamo論文的Cassandra比較著名,HBase scan性能強,與Hadoop MapReduce天然集成,SingleLeader replica設計,CAP的取捨中強調了CP; Cassandra隨機讀寫性能強,不容易形成熱點,Leaderless replica設計,CAP的取捨中強調AP, 詳細對比參見:阿萊克西斯:cassandra與hbase的利弊分析?適用場景?社區環境?
- Message brokers越來越像資料庫了,比如Kafka,其實你可以把他model成可以隨機讀取message或者順序scan message的資料庫。資料庫也更加像message broker了,比如支持Change Data Capture的資料庫,可以當作Message queue來使用。最流行的就是用redis當queue了。
- Zab,Raft,Paxos這些分散式consensus演算法的流行,成為了分散式系統的脊樑。2PC(本質上是一種consensus演算法)基本被拋棄?
- 雲資料庫興起,AWS Aurora在sigmod 2017的論文中提出:The log is the database。耐災等級達到在一個數據中心全毀(如地震洪水核彈),且另外一數據中心資料庫機群中隨機一台機器硬碟出錯的情況下仍不丟數據且自動修復,小強般的availability支持。最終把mysql用戶從單點錯誤中解救出來。
- 你還在用資料庫嘛?各種基於大數據平台的query引擎出現,Hive,Athena等直接允許用SQL查詢雲文件, 其中serverless的Athena簡直太好用了!!
- SQL會被淘汰嘛?看這個: 明明很多編程語言從對象數組中取數據比用SQL從表中取數據方便,為什麼資料庫還是使用SQL?
- 太多了…想起來再添…
由於大數據技術的蓬勃發展,資料庫這些年真的發展太快了,推薦兩本書吧。讀完這兩本,完全搞懂,你在資料庫知識上碾壓一般的SDE沒有任何問題。(強薦第二本,有什麼不明白的可以私信問我 :) 不保證我能回答就是啦,哈哈,一起學習探討,嗯 )
NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence (9780321826626): Pramod J. Sadalage, Martin Fowler: Books
The Big Ideas Behind Reliable, Scalable, and Maintainable Systems: Martin Kleppmann: 9781449373320: Amazon.com: Books
貌似圖有點小,將就著看吧。
總體而言,基本都朝著內存資料庫發展了
個人愚見
感覺主要就是從 NoSQL 到 NewSQL 的發展,以及針對新硬體的優化。
第一條線: NoSQL -&> NewSQL
NoSQL 主要特徵:1)schema free,有key-value,document,graph等;2)部署於 commodity machines,一般有良好的容錯機制(如多副本);3)強調 scalability,大多 scale horizontally;4)弱一致性,基於CAP理論,一般用eventual consistency來換取A和P;5)事務支持一般較弱;6)SQL 支持一般較弱。
NewSQL 主要特徵:1)良好的事務支持;2)良好的SQL支持;3)良好的scalability;4)強一致,ACID語義。
NoSQL 可以看是 傳統資料庫在面對海量數據的無力,或者是互聯網企業不願再向幾大DB 公司納稅 的情況下 出現的 special-purpose 的database。NoSQL在很多特定的應用領域都取得了成功,但是由於對事務和SQL支持較弱,也限制其使用場景,因此NewSQL的發展應該是時代的必然產物。NewSQL可以看作是當下 general-purpose 的database。
第二條線:面向新硬體的優化,主要是存儲的發展。大內存 -&> 內存資料庫;NVM(含SSD) -&> 各種 混合存儲,針對log、checkpoint優化 的系統 等。 還有很多針對 RDMA, Infinite band~ 等新硬體的各種原型系統。
如果再加一點,可能就是 思想上的發展,現在普遍推崇 開源 和 建立生態。
額外補充幾句:目前 database 大多在做:Auto sharding, paxos consensus, 存儲和計算的分離等;短期內database 估計會做:Auto application-awared optimization,Auto hardware-awared optimization,machine learning based optimization。
我記得比較大的幾個坑就是 column store, main memory, key value store, SQL on Hadoop, geo-distributed transaction (這個更多是噱頭), cloud (multi-tenancy, resource isolation, auto scaling), LSM。其他還有些 RDMA, SSD, Graph DB, XML 啥的。
另外就是 system 和 DB community overlap 又多了。不過這次是 system 的人過來搶DB飯碗了。。。推薦閱讀:
※有哪些分散式資料庫書籍或論文比較好?
※MongoDB和MySQL如何搭配使用?
※知乎為什麼不使用 NoSQL 資料庫?
※Cassandra現在的應用前景怎麼樣?
※如何評價InfoQ文章《別再用MongoDB了!》?