數據庫和區塊鏈的異同

鏈客,專爲開發者而生,有問必答!java

此文章來自區塊鏈技術社區,未經容許拒絕轉載。sql

圖片描述

前幾日有好友詢問我關於數據庫和區塊鏈的異同,我以爲這個問題很是好,今天恰好有空把當時的聊天狀況回憶了一下,可能不少人都有這個困惑,今天就結合相關資料來聊聊,本文存在不少我的傾向性意見,僅供參考。
大部分關於這種命題,通常會用比較兩項技術的優缺點來進行,我認爲這是和稀泥的方法,首先我認爲把區塊鏈和數據庫做比較是毫無心義的,這根本就是兩種徹底不一樣的技術,應用場景、設計思想、實現方式、業務模型都徹底不一樣;惟一能沾上邊的是如今流行的k/v數據庫,在數據結構上應用了相似默克爾樹和區塊鏈部分結構相似,若是僅憑這一點就說兩則相似是不負責任的,首先「樹」是基礎數據結構的一種,幾乎稍微複雜一點軟件系統都會使用到「樹」,我正在打字的輸入法都是經過「樹」實現文字索引的。
爲了說清楚這個問題,仍是分別談談關係型數據庫和NOSQL非關係型數據庫的特色,就知道區塊鏈究竟是什麼技術了
關係型數據庫
(一)首先數據庫的誕生很是久遠,如今所說的數據庫大部分特指」關係型數據庫「。關係模型 是在1970年由IBM的研究員E.F.Codd博士首先提出的,在以後的幾十年中,關係模型的概念獲得了充分的發展並逐漸成爲主流數據庫結構的主流模型。
簡單來講,關係模型指的就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織(簡稱ER模型)
關係型數據庫的特色:數據庫

容易理解:二維表結構是很是貼近邏輯世界的一個概念,關係模型相對網狀、層次等其餘模型來講更容易理解安全

使用方便:通用的SQL語言使得操做關係型數據庫很是方便;數據結構

易於維護:豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大減低了數據冗餘和數據不一致的機率併發

操做完備:支持完備的數據操做(增長、刪除、修改、查詢);複雜的關係型數據庫還支持存儲過程和事務;分佈式

由以上內容可見區塊鏈技術和關係型數據庫幾乎徹底風馬牛不相及,光是ER模型就夠區塊鏈吃一壺的了,另外區塊鏈強調的是不可篡改和存證特性,沒有刪除和修改操做;
(一)另外有一個誤區是,數據庫容易遭受篡改,誠然相比區塊鏈這種基於密碼學的數據記錄方式來講,數據庫是容易遭受人爲惡意篡改的,可是,若是熟悉關係型數據庫的人都知道(DBA),若是嚴格按照第三範式設計的關係型數據庫在保障數據一致性上具備自然的優點,從原理上講徹底能夠經過關係型數據庫模擬出相似比特幣的UTXO模型,通過嚴格設計的關係型數據庫對於部分數據的篡改是能夠察覺和審計的。數據庫技術雖然很老了,可是目前看來仍是不可被代替的。性能

注:因爲以java語言爲表明的ORM開發模型的普及弱化了關係型數據庫功能,在應用層維護數據關係形成大批持久層數據庫安全問題,這不能怪數據庫。區塊鏈

NOSQL非關係型數據庫
NoSQL一詞首先是Carlo Strozzi在1998年提出來的,指的是他開發的一個沒有SQL功能,輕量級的,開源的關係型數據庫。這個定義跟咱們如今對NoSQL的定義有很大的區別,它確確實實字如其名,指的就是「沒有SQL」的數據庫。可是NoSQL的發展慢慢偏離了初衷,咱們要的不是「no sql」,而是「no relational」,也就是咱們如今常說的非關係型數據庫了。
2009年初,Johan Oskarsson舉辦了一場關於開源分佈式數據庫的討論會(後來簡稱NoSQL大會),Eric Evans在此次討論中再次提出了NoSQL一詞,用於指代那些非關係型的,分佈式的,且通常不保證遵循ACID原則的數據存儲系統(數據庫事務必須具有ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔離性,Durability持久性)。Eric Evans使用NoSQL這個詞,並非由於字面上的「沒有SQL」的意思,他只是以爲不少經典的關係型數據庫名字都叫「**SQL」,因此爲了表示跟這些關係型數據庫在定位上的大相徑庭,就是用了「NoSQL「一詞。
非關係型數據庫提出另外一種理念,例如,以鍵值對存儲,且結構不固定,每個元組能夠有不同的字段,每一個元組能夠根據須要增長一些本身的鍵值對,這樣就不會侷限於固定的結構,能夠減小一些時間和空間的開銷。使用這種方式,用戶能夠根據須要去添加本身須要的字段,這樣,爲了獲取用戶的不一樣信息,不須要像關係型數據庫中,要對多表進行關聯查詢。僅須要根據id取出相應的value就能夠完成查詢。但非關係型數據庫因爲不多的約束,他也不可以提供像SQL所提供的where這種對於字段屬性值狀況的查詢。而且難以體現設計的完整性。他只適合存儲一些較爲簡單的數據,對於須要進行較複雜查詢的數據,SQL數據庫顯的更爲合適。
這些數據庫中,其實實現大部分都比較簡單,除了一些共性外,很大一部分都是針對某些特定的應用需求出現的,所以,對於該類應用,具備極高的性能。依據結構化方法以及應用場合的不一樣,主要分爲如下幾類:spa

面向高性能併發讀寫的key-value數據庫:key-value數據庫的主要特色即便具備極高的併發讀寫性能,Redis,Tokyo Cabinet,Flare就是這類的表明。
面向海量數據訪問的面向文檔數據庫:這類數據庫的特色是,能夠在海量的數據中快速的查詢數據,典型表明爲MongoDB以及CouchDB。
面向可擴展性的分佈式數據庫:這類數據庫想解決的問題就是傳統數據庫存在可擴展性上的缺陷,這類數據庫能夠適應數據量的增長以及數據結構的變化。

看過了NOSQL的特色,最有意思的ACID原則,其實仔細分析區塊鏈仍是遵循ACID原則的,相信不用我多說,朋友們本身就應該有結論了,區塊鏈真的徹底也不像NOSQL,固然若是硬要說區塊鏈是爲不可修改存證設計的一種特殊的分佈式NOSQL數據庫,我也無話可說(珍惜生命遠離槓頭)理解了數據庫和區塊鏈的定位其實爲咱們設計業務和應用頗有幫助,區塊鏈真的不是萬能的,仍是「上帝的歸上帝,凱撒的歸凱撒」的好,將來必定是結合二者(或RDS、NOSQL、區塊鏈三者)優點的應用纔有真正價值!提個簡單的醒,供你們思考,若是使用區塊鏈來替代傳統的文件日誌或數據庫日誌會是什麼樣的呢?

相關文章
相關標籤/搜索