重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
NoSQL 數據庫因其功能性、易于開發性和可擴展性而廣受認可,它們越來越多地用于大數據和實時 Web 應用程序,在本文中,我們通過示例討論 NoSQL、何時使用 NoSQL 與 SQL 及其用例。
十年專注成都網站制作,企業網站建設,個人網站制作服務,為大家分享網站制作知識、方案,網站設計流程、步驟,成功服務上千家企業。為您提供網站建設,網站制作,網頁設計及定制高端網站建設服務,專注于企業網站建設,高端網頁制作,對汽車玻璃修復等多個領域,擁有多年的網站制作經驗。
NoSQL是一種下一代數據庫管理系統 (DBMS)。NoSQL 數據庫具有靈活的模式,可用于構建具有大量數據和高負載的現代應用程序。
“NoSQL”一詞最初是由 Carlo Strozzi 在 1998 年創造的,盡管自 1960 年代后期以來就已經存在類似的數據庫。然而,NoSQL 的發展始于 2009 年初,并且發展迅速。
在處理大量數據時,任何關系數據庫管理系統 (RDBMS) 的響應時間都會變慢。為了解決這個問題,我們可以通過升級現有硬件來“擴大”信息系統,這非常昂貴。但是,NoSQL 可以更好地橫向擴展并且更具成本效益。
NoSQL 對于非結構化或非常大的數據對象(例如聊天日志數據、視頻或圖像)非常有用,這就是為什么 NoSQL 在微軟、谷歌、亞馬遜、Meta (Facebook) 等互聯網巨頭中特別受歡迎的原因。
一些流行的 NoSQL 數據庫包括:
隨著企業更快地積累更大的數據集,結構化數據和關系模式并不總是適合。有必要使用非結構化數據和大型對象來更好地捕獲這些信息。
傳統的 RDBMS 使用 SQL(結構化查詢語言)語法來存儲和檢索結構化數據,相反,NoSQL 數據庫包含廣泛的功能,可以存儲和檢索結構化、半結構化、非結構化和多態數據。
有時,NoSQL 也被稱為“ 不僅僅是 SQL ”,強調它可能支持類似 SQL 的語言或與 SQL 數據庫并列。SQL 和 NoSQL DBMS 之間的一個區別是 JOIN 功能。SQL 數據庫使用 JOIN 子句來組合來自兩個或多個表的行,因為 NoSQL 數據庫本質上不是表格的,所以這個功能并不總是可行或相關的。
但是,一些 NoSQL DBMS 可以執行類似于 JOIN的操作——就像 MongoDB 一樣。這并不意味著不再需要 SQL DBMS,相反,NoSQL 和 SQL 數據庫傾向于以不同的方式解決類似的問題。
一般來說,在以下情況下,NoSQL 比 SQL 更可?。?/p>
許多行業都在采用 NoSQL,取代關系數據庫,從而為某些業務應用程序提供更高的靈活性和可擴展性,下面給出了 NoSQL 數據庫的一些企業用例。
內容管理是一組用于收集、管理、傳遞、檢索和發布任何格式的信息的過程,包括文本、圖像、音頻和視頻。NoSQL 數據庫可以通過其靈活和開放的數據模型為存儲多媒體內容提供更好的選擇。
例如,福布斯在短短幾個月內就構建了一個基于 MongoDB 的定制內容管理系統,以更低的成本為他們提供了更大的敏捷性。
大數據是指太大而無法通過傳統處理系統處理的數據集,實時存儲和檢索大數據的系統在分析 歷史 數據的同時使用流處理來攝取新數據,這是一系列非常適合 NoSQL 數據庫的功能。
Zoom使用 DynamoDB(按需模式)使其數據能夠在沒有性能問題的情況下進行擴展,即使該服務在 COVID-19 大流行的早期使用量激增。
物聯網設備具有連接到互聯網或通信網絡的嵌入式軟件和傳感器,能夠在無需人工干預的情況下收集和共享數據。隨著數十億臺設備生成數不清的數據,IoT NoSQL 數據庫為 IoT 服務提供商提供了可擴展性和更靈活的架構。
Freshub就是這樣的一項服務,它從 MySQL 切換到 MongoDB,以更好地處理其大型、動態、非統一的數據集。
擁有數十億智能手機用戶,可擴展性正成為在移動設備上提供服務的企業面臨的最大挑戰。具有更靈活數據模型的 NoSQL DBMS 通常是完美的解決方案。
例如,The Weather Channel使用 MongoDB 數據庫每分鐘處理數百萬個請求,同時還處理用戶數據并提供天氣更新。
NoSQL被我們用得最多的當數key-value存儲,當然還有其他的文檔型的、列存儲、圖型數據庫、xml數據庫等。在NoSQL概念提出之前,這些數據庫就被用于各種系統當中,但是卻很少用于web互聯網應用。比如cdb、qdbm、bdb數據庫。
隨著web2.0的快速發展,非關系型、分布式數據存儲得到了快速的發展,它們不保證關系數據的ACID特性。NoSQL概念在2009年被提了出來。NoSQL最常見的解釋是“non-relational”,“Not Only SQL”也被很多人接受。(“NoSQL”一詞最早于1998年被用于一個輕量級的關系數據庫的名字。)
易擴展?? NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關系數據庫的關系型特性。數據之間無關系,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。
大數據量,高性能 NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益于它的無關系性,數據庫的結構簡單。一般MySQL使用Query
Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對web2.0的交互頻繁的應用,Cache性能不高。而NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了。
本文將從單機MySQL的場景出發,簡述一下隨著網站的訪問量越來越大,數據庫部署的演進過程,到為什么要用MySQL的必要性。
大數據時代的數據有3V的特點:海量Volume、多樣Variety、實時Velocity。
互聯網網站需求的3高的特點:高并發、高可擴、高性能。
一、單機MySql
當一個網站的訪問量不大時,用單個數據庫完全可以輕松應付。
在那個時候,更多的都是靜態網頁,動態交互類型的網站不多。
上述架構下,我們來看看數據存儲的瓶頸是什么?
1.數據量的總大小 一個機器放不下時
2.數據的索引(B+ Tree)一個機器的內存放不下時
3.訪問量(讀寫混合)一個實例不能承受
如果滿足了上述1 or 3個,進化......
二、Memcached(緩存)+Mysql+垂直拆分
后來,隨著訪問量的上升,幾乎大部分使用MySQL架構的網站在數據庫上都開始出現了性能問題,web程序不再僅僅專注在功能上,同時也在追求性能。程序員們開始大量的使用緩存技術來緩解數據庫的壓力,優化數據庫的結構和索引。開始比較流行的是通過文件緩存來緩解數據庫壓力,但是當訪問量繼續增大的時候,多臺web機器通過文件緩存不能共享,大量的小文件緩存也帶了了比較高的IO壓力。在這個時候,Memcached就自然的成為一個非常時尚的技術產品。
Memcached作為一個獨立的分布式的緩存服務器,為多個web服務器提供了一個共享的高性能緩存服務,在Memcached服務器上,又發展了根據hash算法來進行多臺Memcached緩存服務的擴展,然后又出現了一致性hash來解決增加或減少緩存服務器導致重新hash帶來的大量緩存失效的弊端
三、MySql主從復制讀寫分離
由于數據庫的寫入壓力增加,Memcached只能緩解數據庫的讀取壓力。讀寫集中在一個數據庫上讓數據庫不堪重負,大部分網站開始使用主從復制技術來達到讀寫分離,以提高讀寫性能和讀庫的可擴展性。Mysql的master-slave模式成為這個時候的網站標配了。
四、分庫分表+水平拆分+Mysql集群
在Memcached的高速緩存,MySQL的主從復制,讀寫分離的基礎之上,這時MySQL主庫的寫壓力開始出現瓶頸,而數據量的持續猛增,由于MyISAM使用表鎖,在高并發下會出現嚴重的鎖問題,大量的高并發MySQL應用開始使用InnoDB引擎代替MyISAM。
同時,開始流行使用分表分庫來緩解寫壓力和數據增長的擴展問題。這個時候,分表分庫成了一個熱門技術,是面試的熱門問題也是業界討論的熱門技術問題。也就在這個時候,MySQL推出了還不太穩定的表分區,這也給技術實力一般的公司帶來了希望。雖然MySQL推出了MySQL Cluster集群,但性能也不能很好滿足互聯網的要求,只是在高可靠性上提供了非常大的保證。
五、Mysql的擴展性瓶頸
MySQL數據庫也經常存儲一些大文本字段,導致數據庫表非常的大,在做數據庫恢復的時候就導致非常的慢,不容易快速恢復數據庫。比如1000萬4KB大小的文本就接近40GB的大小,如果能把這些數據從MySQL省去,MySQL將變得非常的小。關系數據庫很強大,但是它并不能很好的應付所有的應用場景。MySQL的擴展性差(需要復雜的技術來實現),大數據下IO壓力大,表結構更改困難,正是當前使用MySQL的開發人員面臨的問題。
六、為什么用Nosql
今天我們可以通過第三方平臺(如:Google,Facebook等)可以很容易的訪問和抓取數據。用戶的個人信息,社交網絡,地理位置,用戶生成的數據和用戶操作日志已經成倍的增加。我們如果要對這些用戶數據進行挖掘,那SQL數據庫已經不適合這些應用了, NoSQL數據庫的發展也卻能很好的處理這些大的數據。下面給大家看一下,web應用數據量的增長圖:
七、Nosql是什么
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,
泛指非關系型的數據庫。隨著互聯網web2.0網站的興起,傳統的關系數據庫在應付web2.0網站,特別是超大規模和高并發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題,包括超大規模數據的存儲。
(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多余操作就可以橫向擴展。
八、Nosql的優勢
1.易擴展
NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關系數據庫的關系型特性。
數據之間無關系,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。
2.大數據量,高性能
NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。
這得益于它的無關系性,數據庫的結構簡單。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對web2.0的交互頻繁的應用,Cache性能不高。而NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了。
3.多樣靈活的數據模型
NoSQL無需事先為要存儲的數據建立字段,隨時可以存儲自定義的數據格式。而在關系數據庫里,增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是一個噩夢。
九、Nosql數據庫的四大分類
鍵值(Key-Value)存儲
列存儲
文檔存儲
圖形存儲
常見的有:Redis、Memcache、MongoDB,這里就不一 一 介紹了。
因為關系數據庫運行的慢
處理大數據的大多數情況是nosql比較高效
但是nosql也沒法完全取代關系數據庫
nosql不能處理復雜的邏輯
但是很多情況下只是簡單的mapping,匯總,
在目前互聯網大數據的環境下nosql會越來越普及