關係型數據庫和非關係型數據庫有什麼區別?

池璐

歡迎關注我,一個程序員老司機,和你分享編程、運營、需求等等經驗和趣事。

作為一個多年的程序員,兩種數據庫都使用過現在將自己的一些感受和你分享一下。

最大的區別



兩種數據庫的最大區別在於存儲方式,關係數據庫是將關係存儲到數據庫裡面,什麼關係呢?就是一對一、一對多和多對多關係,這樣存儲進去之後就能夠通過sql命令查詢到符合客觀需求的數據,但是將關係存儲進行查詢時,有時需要關聯很多個數據表才能夠得到需要的數據,於是就誕生的分關係數據庫,也就是nosql數據庫。

兩種常見的非關係數據庫

一種是redis數據庫,這種數據庫主要做為緩存使用,它一般配合關係數據庫一起用,也就是先從關係數據庫獲取或者計算數據,然後保存到redis數據庫裡面,而mongodb數據庫除了具備redis的特點,也具備關係數據庫的特點,所以一般業務數據還是用它來保存。

那為什麼不用mongodb來代替redis

因為redis非常小巧和專業,已經將緩存做到了極致。


web互聯網

我們首先來說一下關係型和非關係型數據庫的區別,然後再說mongodb和redis。

關係型數據庫,顧名思義就是說裡邊存儲的數據都是關係,就是數學裡說的元組。每個元素都有對應的另一個元素存在。在這種數據庫的中,數據是用二維表來表示的,而表之間是可以有關係的,比如員工表和部門表,每個員工都屬於某一部門,這種關係在關係型數據庫是用外鍵來表示的,員工表中存了部門的ID,那麼在查詢的時候就可以通過這種關係,把員工和部門的信息一同查出來,可以使用SQL的join子句。代表性的數據庫有MySQL, Oracle和PostgreSQL。

非關係型數據庫中數據的表示並不是關係的,有這麼幾種類型,Document類型,以MongoDB為代表,一種是Key-Value類型的,以Redis為代表,還有一種是BigTable類型的,以cassandra為代表。每種都有不同的優勢和功能特性,不過總體上非關係型數據庫的出現是為了更好的適應分佈式系統架構和提升性能。關係型數據庫的Join是非常耗時的一個操作,在大量數據的前提下,性能犧牲的比較多。而非關係型數據庫的設計是denormalized,即通過定義重複的數據來消除join,例如員工和部門,員工數據中會包括部門的相關數據,比如名稱,負責人等。這樣做的代價就是每當部門數據有更新,員工數據也需要做同步的修改,可能會引起數據不一致。所以這兩種數據庫需要根據業務場景來做選擇,是需要高併發,高性能,還是要方便數據的存儲,數據是不是最適合用表的形式來存儲等等。

再來說MongoDB和Redis。

這兩種都是非關係型的數據庫,MongoDB是document類型的,它的存儲格式是bson,是帶有數據類型的json,非常適合給web前端提供數據。MongoDB的數據是存儲在硬盤上,所以會受到硬盤速度的制約。而redis是key-value形式存儲的,體積小,且數據是存在內存中,極大的提高了性能,所以非常適合做緩存和一些臨時數據的存儲,如用於驗證的token。


乾途技術分享

題主要先明白兩種類型,

關係型就常見的oracle,MySQL,等等

非關係緩存中用的多,而且有點像精簡版的關係型!

鍵值對形式或者文檔形式存儲!

非關係不支持SQL,不支持事務,不過速度快啊,性能好!

至於選擇的Redis跟mongdb,要看場景進行選擇了!

因為mongdb以文檔形式存,最好在開發評論系統的時候使用,存json格式數據最為關鍵!

若有幫助,右上角,純手打!個人經驗總結!


服務端開發工程師

關係型數據庫遵循acid(原子性,一致性,隔離性,持久性),非關係型數據庫只要遵循cap(一致性,可用性和分區容忍性),那麼這些屬性的差異也就決定了性能的快慢和建表的數據結構的類型,其中mongodb和redis都屬於nosql,不過mongodb屬於文檔型數據庫,redis屬於內存數據庫


分享到:


相關文章: