該如何使用SQL數據庫、NoSQL數據庫還是兩者都用?

浮華與陰霾


我們知道,技術是會一直髮展的,而我們常說的關係型數據庫、NoSQL其實都是技術發展的產物,都是為了讓我們更好的解決問題而生的。

在當下的項目開發時,我們的技術選型也不像以前那樣單一,對於存在數據落地場景的,那像MySQL/Oracle/SQL Server這類的數據庫則是必須的。而我們發現,NoSQL使用與否都不會影響項目功能,有些項目會使用,有些則沒有使用。

所以有不少朋友會有這方面的質疑,關係型數據庫和NoSQL是單獨使用還是搭配使用?或者什麼場景下要使用關係型數據庫,什麼時候又該使用NoSQL呢?在這裡結合我的實際經驗談下我的看法以供大家參考:

1、數據庫是數據落地的基礎,是必須的

但凡我們的項目中存在數據,而且這些數據需要保存,不管數據量的大小,數據庫都是必須要使用的。

試想一下,如果沒有數據庫軟件,我們的數據如何有效存取?

2、NoSQL推薦使用

在這裡說下,NoSQL不能單從字面上理解為“沒有SQL、不是SQL、不需要SQL”,NoSQL的含義是Not Only SQL,不僅僅是SQL。

NoSQL是一類非關係型數據庫的統稱,最常用的就是:Redis、Memcached了。像我們最常使用的Redis是一款內存型K/V數據庫,它具備以下優點:

  • 內存型數據庫存入、讀取數據都比從硬盤中讀取要快,性能很高。同時它支持數據持久化,可以將內存中的數據落地到硬盤中;

  • Redis的數據類型豐富,不光光當成“緩存”來使用,還可以當成隊列來使用;


站在架構角度去說,我們建議項目採用NoSQL+關係型數據庫這種形式來部署。數據庫相對於NoSQL來說還是偏重了,特別是在高併發項目中,數據庫的I/O開銷和查詢效率都是很大的。當NoSQL推出時,我們一般將熱點數據也存入NoSQL,下次查詢時直接從NoSQL中查詢這樣就減少了數據庫的壓力,加快了系統的處理響應速度。

以上就是我的觀點,對於這個問題大家是怎麼看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我瞭解更多科技知識!


網絡圈


首先明確一點,NoSQL不是Not SQL,而是Not Only SQL,兩者都是處理數據的,但是應用環境還是有比較大的區別的。

首先,SQL一般用來處理關係型數據,數據也都是結構化存儲的,比如我們建立一個表,那麼這個表裡的所有行的字段都是一樣的,當然,現在不少SQL數據庫也支持一些非結構化數據了,比如XML、Json等,不過,原則上,我們還是把SQL劃入結構化存儲的範疇。

NoSql一般用來處理非結構化的數據,數據量一般是超級大的,動輒幾億條甚至幾十上百億條。數據的每一行(假如有這個概念的話)都可以有不同的列,存儲格式也不一樣,有的是鍵值對、有的json、有的列存儲;現在流行的有Redis、Mongodb、Cassandra等十幾種,每種數據庫都各有千秋,其中最特殊的是Mongodb,這貨是最像關係型數據庫的非關係型數據庫,應用範圍很廣,深受傳統關係型數據庫轉到非關係型數據庫使用者的喜愛。

兩者特點總結如下:

RDBMS

  • 高度組織化結構化數據
  • 結構化查詢語言(SQL)
  • 數據和關係都存儲在單獨的表中。
  • 數據操縱語言,數據定義語言
  • 嚴格的一致性- 基礎事務

NoSQL

  • 代表著不僅僅是SQL
  • 沒有聲明性查詢語言
  • 沒有預定義的模式
  • 鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫
  • 最終一致性,而非ACID屬性
  • 非結構化和不可預知的數據
  • CAP定理
  • 高性能,高可用性和可伸縮性

總之,各有特點,需要根據具體的業務情況來選擇,也是可以並用的。


分享到:


相關文章: