NoSql的三大基石:CAP理論&BASE&最終一致性


關系型數據庫的局限

      NoSql出現在關系型數據庫之后,主要是為了解決關系型數據庫的短板,我們先來看看隨着軟件行業的發展,關系型數據庫面臨了哪些挑戰:

      1、高並發

      一個最典型的就是電商網站,例如雙11,幾億大軍的點擊造成在某一時刻的並發量是很高的,傳統的關系型數據庫肯定已經是不堪重負了,如Oracle的Session數量推薦的才只有500。

      2、高效率存儲海量數據

      大數據時代,數據量已經不是用GB、TB來衡量了,而是EB、ZB了,面對這海量的數據,如何高效率的存儲這些數據,關系型數據庫無法解決這個問題,以Oracle為例,單機的物理擴展不僅成本高,而且難度也加大了。

      3、高可用&高擴展

      Oracle即使RAC能擴展數台機器,但數量也是有限。

      NoSql的出現即是為了解決這些問題了,但是NoSql並不是用來替代關系型數據庫的,因為它本身也有着不可克服的缺陷,俗話說,好處不可能都讓你占了。

 

關系型數據庫與NoSql一致性的比較

      一般來說,構建NoSql,為了高可用和海量數據存儲,我們會選擇犧牲一致性,但這並不意味着我們不要一致性,而是我們可以選擇不實現強一致性,而實現弱一致性或者最終一致性。無論是在關系型數據庫或者NoSql中,我們都是通過事務來實現一致性,下面我們來討論兩者在一致性方面的差異:

      關系型數據庫事務的4個基本特性ACID,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。

      而對於分布式事務的特性BASE,則是反這個標准的,即基本可用(Basically Availble)、軟狀態/柔性事務(Soft-state)、最終一致性(Eventual Consistency)。下面是Brewer教授在PODC大會展示的ACID vs BASE:

     

      前面我們說過,NoSql的出現是為了解決高並發、海量數據、高可用等問題的,因而一般分布式是最優選項,我們先來說一下分布式系統的特性:CAP理論,當然,這也是NoSql的特性:

 

CAP理論

      CAP理論是Brewer教授提出的:一個分布式系統不能同時滿足一致性(Consistency)、可用性(Availability)和分區容錯性(Tolerance of network Partition)。魚和熊掌不可兼得。

       一致性:任何一個讀操作總是能讀取到之前完成的寫操作結果,也就是在分布式環境中,多點的數據是一致的。

      可用性:每一個操作總是能在確定的時間內返回,也不是系統隨時都是可用的。

      分區容錯性:在出現網絡分區(如斷網)的情況下,分離的系統也能正常運行。

      PS:這里有人可能會問,可用性與分區容錯性是不是一個意思(既然分區都可以容錯了,不就是可用么),個人理解這里可用性說的是調用不會被阻塞。

      而市場上的NoSql則以CAP理論為指導,大多選擇實現了CAP理論的兩點(如CA、CP、AP),未實現的即其缺陷部分。下面則是常見NoSql系統的特性:

     

     

    常見NoSql的分類

類型

部分代表

特點

列存儲

Hbase

Cassandra

Hypertable

顧名思義,是按列存儲數據的。最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢。

文檔存儲

MongoDB

CouchDB

文檔存儲一般用類似json的格式存儲,存儲的內容是文檔型的。這樣也就有有機會對某些字段建立索引,實現關系數據庫的某些功能。

kv存儲

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通過key快速查詢到其value。一般來說,存儲不管value的格式,照單全收。(Redis包含了其他功能)

圖存儲

Neo4J

FlockDB

圖形關系的最佳存儲。使用傳統關系數據庫來解決的話性能低下,而且設計使用不方便。

對象存儲

db4o

Versant

通過類似面向對象語言的語法操作數據庫,通過對象的方式存取數據。

xml數據庫

Berkeley DB

XML

高效的存儲XML數據,並支持XML的內部查詢語法,比如XQuery,Xpath。

 

 參考文檔

     https://www.zhihu.com/question/54105974

     http://blog.sina.com.cn/s/blog_3fe961ae010139u6.html

     https://www.cnblogs.com/chaser24/p/6417757.html

     https://baike.baidu.com/item/NoSQL/8828247

     http://www.studyofnet.com/news/365.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM