告訴你 SQL 數據庫與 NoSQL 數據庫的區別

簡單來說 SQL 數據庫和 NoSQL 數據庫有着共同的目標:存儲數據,但存儲的方式不同

一. 表

  • SQL中的表結構具有嚴格的數據模式約束: 存儲數據很難出錯。
  • NoSQL存儲數據更加靈活自由:可能導致數據不一致性問題的發生。

SQL

每個表規定了固定的字段,各個字段有固定的類型

NoSQL

而 NoSQL 使用類 Json 的鍵值對存儲數據(還有使用陣列、圖形的),
一個記錄或者說一個文檔可以是這樣的格式

KEY 1:
{
   id: 123456,
   name:"howie",
   age: 20
}

也可以是這樣的格式

KEY 2:
{
 ISBN: 9780992461225,
 title: "JavaScript: Novice to Ninja",
 author: "Darren Jones",
 price: 29.00,
 review: [
   { name: "A Reader", text: "The best JavaScript book I've ever read." },
   { name: "JS Expert", text: "Recommended to novice and expert developers alike." }
 ]
}

所有的記錄組成一個集合,例如 redis

二. 數據庫的模式

SQL 模式

關係型數據庫中,在把數據存儲進去前,你需要做很多工作,如設置數據庫字符集,定義主鍵,設置各個字段的類型,設置索引等等,這些就是關係型數據庫的模式,這些模式的限制,讓表結構有着嚴格的約束。

NoSQL 無模式

而非關係型數據庫的數據可以隨時寫入,不需要去事先定好各種條條框框,也正因爲如此,NoSQL 數據庫更適合於那些不能夠確定數據需求的的工程項目。

三. 數據庫的規範化

SQL 規範化

例如我們擁有兩表
用戶表:

購物表:

通常情況下,我們不會在購物表中重複每個 user 的所有信息,而是會添加 user_id 字段關聯兩個表,以最小化數據的冗餘。
這叫做數據庫的規範化

NoSQL 非規範化

規範化的設計方法很好地優化了數據冗餘,但是在 NoSQL 中一般不會這麼設計,我們會直接爲每一條購物數據都添上用戶的所有信息:

{
    id: 1,
    pay: 20,
    goods: "杯子",
    number: 2,
    time: "2018-06-04 22:58:46",
    user : {
        id: 1,
        name: "Time",
        age: 18,
        password: "111111",
    }
},
{
    id: 2,
    pay: 50,
    goods: "書本",
    number: 1,
    time: "2018-06-04 22:59:46",
    user : {
        id: 1,
        name: "Time",
        age: 18,
        password: "111111",
    }
}

目的是更快地查詢,當然,如果需要頻繁更新用戶信息,自然會使效率下降

四. 事務

SQL 數據庫中提供了事務操作,將兩條或者多條更新操作結合成一個事務(要麼全部執行成功要麼都失敗)。

而 NoSQL 數據庫則缺乏傳統的事務機制,不過很多 NoSQL 數據庫也有各自的方式去處理這一類問題

五. 操作語法

SQL 數據庫使用傳統的 SQL 語言來進行增刪查改,而 NoSQL 數據庫則使用各自的語法來進行操作。

比如查詢,對比 SQL 的 select * from table; , MongoDB 有 db.table.find() ,HBase 有scan table

通常情況下,由於 NoSQL 非規範化,數據模型的簡單等原因 NoSQL 比 SQL 語言更快,當然,一個設計得好的 SQL 數據庫的表現一定會比一個設計得不好的 NoSQL 數據庫性能好很多

六. 適用場景

適合使用 SQL 開發的項目:
  • 數據庫模式,結構可以預先規定的,或者可以相對固定的項目
  • 要求數據一致性
  • 具有良好的開發者經驗和技術支持的標準的成熟技術
適合使用 NoSQL 開發的項目:
  • 不相關,不確定和逐步發展的數據需求
  • 更簡單或者更寬鬆的能夠快速開始編程的項目
  • 速度和可擴展性至關重要的

當然現在很多項目都使用 SQL 和 NoSQL 相結合的方式,各自發揮其優點。


以上爲文章所有內容,如有錯誤,敬請指出,多多指教,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章