SQL與NoSQL(關係型與非關係型)資料庫的區別
永遠正確的經典答案依然是:具體問題具體分析。
資料表VS.資料集
關係型和非關係型資料庫的主要差異是資料儲存的方式。關係型資料天然就是表格式的,因此儲存在資料表的行和列中。資料表可以彼此關聯協作儲存,也很容易提取資料。與其相反,非關係型資料不適合儲存在資料表的行和列中,而是大塊組合在一起。非關係型資料通常儲存在資料集中,就像文件、鍵值對或者圖結構。你的資料及其特性是選擇資料儲存和提取方式的首要影響因素。
預定義結構VS.動態結構
關係型資料通常對應於結構化資料,因為資料表都有預定義好的結構(列的定義),結構描述了資料的形式和內容。這一點對資料建模至關重要,你必須“第一時間先把結構定義好”。雖然預定義結構帶來了可靠性和穩定性,但是已經存入資料的表結構要修改就非常痛苦了。另一方面,非關係型資料基於動態結構,通常適用於非結構化資料。非關係型資料可以很容易適應資料型別和結構的變化,因為動態結構本身就支援這一點。
儲存規範化VS儲存代價
關係型資料庫的資料儲存是為了更高的規範性,把資料分隔成最小的邏輯表(關係表)以避免重複,獲得最精簡的空間利用。雖然資料規範性會使資料管理更清晰,但它通常也會帶來一點點複雜性,尤其是單個操作可能涉及多個關係表的時候,資料管理就有點麻煩。另外,更精簡的空間利用通常可以節約寶貴的資料儲存,但是在當今世界我們基本可以認為儲存的代價(磁碟空間)是微不足道的。而非關係型資料儲存在平面資料集中,資料經常可能存在重複。單個資料庫很少被分隔開,而是儲存成一個整體,這樣是為了整塊資料更容易讀寫。
縱向擴容VS橫向擴容
SQL和NoSQL資料庫最大的差別可能是在擴充套件方式上,要支援日益增長的需求當然要擴充套件。要支援更多併發量,SQL資料庫是縱向擴充套件,也就是說提高處理能力,使用速度更快速的計算機,這樣處理相同的資料集就更快了。因為資料儲存在關係表中,操作的效能瓶頸可能涉及很多個表,這都需要通過提高計算機效能來客服。雖然SQL資料庫有很大擴充套件空間,但最終肯定會達到縱向擴充套件的上限。而NoSQL資料庫是橫向擴充套件的。非關係型資料儲存天然就是分散式的,NoSQL資料庫的擴充套件可以通過給資源池新增更多普通的資料庫伺服器(節點)來分擔負載。
結構化查詢VS非結構化查詢
關係型資料庫通過所謂結構化查詢語言(也就是我們常說的SQL)來運算元據。SQL支援資料庫CRUD(增加,查詢,更新,刪除)操作的功能非常強大,是業界標準用法。非關係型資料庫以塊(像文件一樣)為單元操縱資料,使用所謂的非結構化查詢語言(UnQL),它是沒有標準的,因資料庫提供商的不同而不同。關係型表中主鍵的概念對應非關係儲存中的文件Id。SQL資料庫使用預定義優化方式(比如列索引定義)幫助加速查詢操作,而NoSQL資料庫採用更簡單而精確的資料訪問模式。
對映VS本地化
SQL和NoSQL資料儲存的選擇還取決於開發人員,儘管這個因素影響不大。採用物件導向程式語言的開發人員通常會同時操作一個或多個資料實體(包括巢狀資料、列表和陣列的複雜結構),把資料傳遞給應用程式使用者介面。要是討論到底層資料庫,事情就並不總是那麼公平合理了。在關係型儲存中,資料實體通常需要分成多個部分進行規範化,然後分開儲存到多個關係型表中精簡儲存。幸運的是,這是一個長期存在的問題,大部分程式設計平臺都有相應的簡單解決方案,比如ORM層(物件關係對映)。ORM是位於關係型資料來源和開發者使用的物件導向資料實體之間的一個對映層。然而,對於非關係型儲存,不需要規範化資料,複雜資料實體可以整體存放在獨立單元中。應用程式中使用的物件通常序列化為JSon串,儲存在NoSQL資料庫的JSon文件中。
事務性VS純擴充套件性
如果你的資料操作需要高事務性或者複雜資料查詢需要控制執行計劃,那麼傳統的SQL資料庫從效能和穩定性方面考慮是你的最佳選擇。SQL資料庫支援對事務原子性細粒度控制,並且易於回滾事務。雖然NoSQL資料庫也可以使用事務操作,但它們真正閃亮的價值是在操作的擴充套件性和大資料量處理方面。
ACID VS CAP
SQL 資料庫久負盛名的價值就是通過所謂的ACID屬性(原子性,一致性,隔離性,永續性)保證資料完整性,大部分關係型儲存供應商都支援ACID。我們的目標是支援隔離不可分割的事務,其變化是持久的,資料也保持一致狀態。而NoSQL資料庫是讓你在CAP(一致性,可用性,分割槽容忍度)中的任意兩項中選擇,因為在基於節點的分散式系統中,很難做到三項都滿足。
資料VS大資料
SQL資料庫可以可靠地儲存和處理資料,而NoSQL最大的優勢是在應對大資料方面,也就是由我們社會或者計算機每天產生的大量非結構化的資料實體。NoSQL
用無模式方式做資料管理,所以其橫向擴充套件潛力是無限的,這可能是深度處理大資料捕獲、管理、檢索、分析和視覺化的唯一有效途徑。
資料記錄VS物聯網和人聯網
關聯式資料庫在關注資料規範化和保證效能的基礎上精簡儲存。但是近年來,我們產生資料的速度遠大於關係型儲存能滿足儲存的能力增長。刺激資料如此迅猛增長的原因是:巨大量的使用者數和物聯網。連線到網際網路的使用者在成倍增加,在同步使用我們的應用。由於大量移動裝置資料感測裝置接入網際網路,機器產生的資料量也大幅增加。因此企業必須尋求NoSQL
技術及基礎架構來處理持續湧入的半結構化和非結構化資料。
內部部署VS雲端計算
雲端計算現在已經無處不在了,它兼具SQL和NoSQL資料庫的益處。雲環境中的關係型儲存通常是以服務形式提供的,是可複製、高可用性且分散式的,極大地提高了橫向擴充套件能力。託管於雲服務中的NoSQL資料庫也天然享有自動分片的好處,可以階段性地靈活彈性處理,整合快取記憶體和巨大的計算能力來捕獲、儲存和分析大資料。
付費VS開源
有一種看法認為,SQL資料庫大多數比較昂貴,而NoSQL
資料庫通常都是開源的。事實上,兩種型別資料庫都有開源的和商業的。常見的SQL 資料庫有微軟公司的SQL Server,MySQL,SQLite,Oracle
和PostgreSQL
。流行的NoSQL
資料庫有Couchbase,MongoDB,Redis,BigTable
和RavenDB
。
SQL和NoSQL這兩者都有各自的優缺點,選擇正確的架構取決於你構建應用的需求。
相關文章
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- 關係型資料庫和非關係型資料庫的區別資料庫
- 關係型資料庫與非關係型資料庫介紹!資料庫
- 資料庫入門之3張表對比關係型與非關係型資料庫資料庫
- redis—非關係型資料庫Redis資料庫
- MYSQL資料庫型別與JAVA型別對應關係MySql資料庫型別Java
- 關係型資料庫之SQL資料庫SQL
- 列舉常見的關係型資料庫和非關係型都有那些?資料庫
- Java資料型別與資料庫欄位型別對應關係Java資料型別資料庫
- 聊聊非關係型資料庫MongoDB索引資料庫MongoDB索引
- nodejs之MongoDB 非關係型資料庫NodeJSMongoDB資料庫
- 關係型資料庫資料庫
- 關係型資料庫概要資料庫
- 關係型資料庫原理資料庫
- 關係型和非關係型資料庫一定要對立?達夢資料提供新思路資料庫
- C++與Rust資料型別對應關係C++Rust資料型別
- MySQL與Java常用資料型別的對應關係MySqlJava資料型別
- 關係型資料庫之索引資料庫索引
- 如何將資料從Hadoop匯出到關係型和NoSQL資料庫?HadoopSQL資料庫
- 模型型別與加速潛力的關係模型型別
- SQL Server 2016關係型資料庫概覽AZSQLServer資料庫
- 關係型資料庫 RDBMS 的舊與新 — 談談 NewSQL資料庫SQL
- mysqlclient操作MySQL關係型資料庫MySqlclient資料庫
- SQLALchemy操作MySQL關係型資料庫MySql資料庫
- FastAPI(44)- 操作關係型資料庫ASTAPI資料庫
- Node MySQL打造關係型資料庫MySql資料庫
- Excutors 與 ThreadPoolExcutor 的關係與區別thread
- Docker與containerd的關係與區別DockerAI
- R 語言中雙中括號 [[]]與資料型別列表的關係資料型別
- 架構與資料庫的關係架構資料庫
- 反DDD模式之關係型資料庫模式資料庫
- 平時常見關係型資料庫資料庫
- 並推出了關係型資料庫功能來補充其核心NoSQL資料庫功能資料庫SQL
- Android NDK開發中java資料型別與C/C++資料型別的對應關係AndroidJava資料型別C++
- 資料庫基礎知識詳解五:MySQL中的索引和其兩種引擎、主從複製以及關係型/非關係型資料庫資料庫MySql索引
- 雲關係型資料庫(Relational Database Service,RDS)資料庫Database
- Java中類與物件的關係與區別Java物件
- 2013年大資料系統與關係型資料的共存GQ大資料