主頁 > 前端設計 > 關系型資料庫(Relational Database)與非關系型資料庫(NoSQL)的區別:(MySQL,Redis,Memcache,MongoDB)

關系型資料庫(Relational Database)與非關系型資料庫(NoSQL)的區別:(MySQL,Redis,Memcache,MongoDB)

2020-10-13 04:09:02 前端設計

Table of Contents

關系型資料庫(Relational Database)

什么是關系資料庫

什么是SQL?

關系資料庫的結構

關系模型

關系資料庫的好處

資料一致性

隔離性和原子性

ACID和關系資料庫

存盤程序和關系資料庫

資料庫鎖定和并發

選擇關系資料庫時要尋找什么

未來的關系資料庫

非關系型資料庫 - Nosql介紹

NoSQL資料庫的型別是什么?

NoSQL資料庫如何作業

Nosql和關系型資料庫的區別

1.存盤方式

2.存盤結構

3.存盤規范

4.存盤擴展

5.查詢方式

6.事務

7.性能

8.授權方式

ACID理論

1. 原子性

2. 一致性

3. 隔離性

4. 持久性

Redis,Memcache,MongoDb的特點與區別

Redis

優點

缺點

Memcache

優點

缺點

MongoDB

優點

缺點

Redis、Memcache和MongoDB的區別

1.性能

2.便利性

3.存盤空間

4.可用性

5.可靠性

6.一致性

7.資料分析

8.應用場景

Redis 簡介

Redis 優勢


關系型資料庫(Relational Database)


什么是關系資料庫

關系資料庫是一種型別的資料庫,其存盤并提供訪問被彼此相關的資料點,關系資料庫基于關系模型,這是一種在表中表示資料的直觀,直接的方法,在關系資料庫中,表中的每一行都是一條記錄,該記錄具有唯一的ID(稱為key),該表的列保存資料的屬性,每個記錄通常為每個屬性都有一個值,這使得在資料點之間建立關系變得容易,

什么是SQL?


現在我們已經了解了NoSQL資料庫,讓我們將它們與傳統上最流行的資料庫進行對比:SQL(結構化查詢語言)訪問的關系資料庫,與關系資料庫互動時可以使用SQL,在關系資料庫中資料存盤在具有固定列和行的表中,

SQL資料庫在1970年代初開始流行,當時,存盤非常昂貴,因此軟體工程師對他們的資料庫進行規范化以減少資料重復,

1970年代的軟體工程師通常也遵循瀑布式軟體開發模型,在開始開發之前,詳細計劃了專案,軟體工程師精心創建復雜的物體關系(ER)圖,以確保他們仔細考慮了需要存盤的所有資料,由于采用了這種預先計劃模型,如果在開發周期中需求發生變化,軟體工程師就難以適應,結果,專案經常超出預算,超過了截止日期,無法滿足用戶需求, -- https://www.mongodb.com/nosql-explained

關系資料庫的結構


關系模型意味著邏輯資料結構(資料表,視圖和索引)與物理存盤結構是分開的,這種分離意味著資料庫管理員可以管理物理資料存盤,而不會影響對作為邏輯結構的資料的訪問,例如,重命名資料庫檔案不會重命名存盤在其中的表,

邏輯操作和物理操作之間的區別也適用于資料庫操作,這是明確定義的操作,使應用程式能夠操縱資料庫的資料和結構,邏輯操作允許應用程式指定其所需的內容,而物理操作則確定應如何訪問該資料然后執行任務,

為了確保資料始終準確且可訪問,關系資料庫遵循某些完整性規則,例如,完整性規則可以指定不允許在表中重復行,以消除潛在的錯誤資訊進入資料庫的可能性,

關系模型


在資料庫的早期,每個應用程式都以自己獨特的結構存盤資料,當開發人員想要構建使用該資料的應用程式時,他們必須對特定的資料結構了解很多,才能找到所需的資料,這些資料結構效率低下,難以維護且難以優化以提供良好的應用程式性能,設計關系資料庫模型是為了解決多個任意資料結構的問題,

關系模型提供了表示和查詢可被任何應用程式使用的資料的標準方式,從一開始,開發人員就認識到關系資料庫模型的主要優勢在于表的使用,這是一種存盤,訪問結構化資訊的直觀,有效且靈活的方式,

隨著時間的流逝,隨著開發人員開始使用結構化查詢語言(SQL)在資料庫中寫入和查詢資料,關系模型的另一優勢出現了,多年來,SQL已被廣泛用作資料庫查詢的語言,SQL基于關系代數,提供了一種內部一致的數學語言,可以更輕松地提高所有資料庫查詢的性能,相比之下,其他方法必須定義單個查詢,

關系資料庫的好處


所有型別和規模的組織都使用簡單而強大的關系模型來滿足各種資訊需求,關系資料庫用于跟蹤庫存,處理電子商務交易,管理大量關鍵任務客戶資訊等等,可以考慮將關系資料庫用于資料點彼此相關的任何資訊需求,并且必須以安全,基于規則的一致方式進行管理,

關系資料庫自1970年代就已經存在,如今,關系模型的優勢繼續使其成為資料庫中最廣泛接受的模型,

資料一致性


關系模型最適合維護應用程式和資料庫副本(稱為實體)之間的資料一致性,例如,當客戶在ATM機上存錢,然后查看手機上的帳戶余額時,客戶希望看到該筆存款會立即反映在更新的帳戶余額中,關系資料庫在這種資料一致性方面表現出色,可確保資料庫的多個實體始終具有相同的資料,

對于其他型別的資料庫,很難與大量資料保持這種及時的一致性,最近的某些資料庫(例如NoSQL)只能提供“最終一致性”,根據此原理,在擴展資料庫或多個用戶同時訪問同一資料時,資料需要一些時間來“追趕”,最終的一致性對于某些用途是可以接受的,例如在產品目錄中維護串列,但是對于關鍵業務操作(例如購物車交易),關系資料庫仍然是黃金標準,

隔離性和原子性


關系資料庫在非常細粒度的級別上處理業務規則和策略,并具有關于隔離嚴格策略(即,永久更改資料庫),例如,考慮一個庫存資料庫,該資料庫跟蹤始終一起使用的三個部分,從庫存中拉出一個零件時,還必須拉出另外兩個,如果這三個部分之一不可用,則不應該拉扯任何一個部分-資料庫作出任何隔離之前,所有三個部分都必須可用,關系資料庫在知道可以對所有三個資料庫都提交之前,不會提交一部分,這種多方面的隔離能力稱為原子性,原子性是確保資料庫中資料準確并確保其符合業務規則,法規和政策的關鍵,

ACID和關系資料庫


定義關系資料庫事務的四個關鍵屬性是:原子性,一致性,隔離性和持久性(通常稱為ACID)

  • 原子性定義了構成完整資料庫事務的所有元素,
  • 一致性定義了在事務之后將資料點保持在正確狀態的規則,
  • 隔離使事務的效果對其他人不可見,直到提交為止,以避免混淆,
  • 持久性可確保一旦提交事務,資料更改將成為永久性的,
  1. Atomic:All operations in a transaction succeed or every operation is rolled back.
  2. Consistent:On the completion of a transaction, the database is structurally sound.
  3. Isolated:Transactions do not contend with one another. Contentious access to data is moderated by the database so that transactions appear to run sequentially.
  4. Durable:The results of applying a transaction are permanent, even in the presence of failures.
  • Atomic:事務中的所有操作都會成功,或者每個操作都會回滾,
  • 一致的:事務完成后,資料庫在結構上是健全的,
  • 孤立:交易不相互競爭,資料庫對有爭議的資料訪問進行仲裁,以便事務似乎按順序運行,
  • 持久性:即使存在故障,應用事務的結果也是永久的,

存盤程序和關系資料庫


資料訪問涉及許多重復操作,例如,從資料表中獲取資訊的簡單查詢可能需要重復數百或數千次才能產生所需的結果,這些資料訪問功能需要某種型別的代碼才能訪問資料庫,應用程式開發人員不想在每個新應用程式中為這些功能撰寫新代碼,幸運的是,關系資料庫允許存盤程序,這是可以通過簡單的應用程式呼叫訪問的代碼塊,例如,單個存盤程序可以為多個應用程式的用戶提供一致的記錄標記,存盤程序還可以幫助開發人員確保以特定方式實作應用程式中的某些資料功能,

資料庫鎖定和并發


當多個用戶或應用程式試圖同時更改同一資料時,資料庫中可能會發生沖突,鎖定和并發技術可在保持資料完整性的同時減少發生沖突的可能性,

鎖定可防止其他用戶和應用程式在更新資料時訪問資料,在某些資料庫中,鎖定適用于整個表,這會對應用程式性能產生負面影響,其他資料庫(例如Oracle關系資料庫)在記錄級別應用鎖,使表中的其他記錄可用,從而有助于確保更好的應用程式性能,

當多個用戶或應用程式同時在同一資料庫上呼叫查詢時,并發管理活動,根據為資料控制定義的策略,此功能提供了對用戶和應用程式的正確訪問,

選擇關系資料庫時要尋找什么


用于存盤,管理,查詢和檢索關系資料庫中存盤的資料的軟體稱為關系資料庫管理系統(RDBMSf)(《RDBMS即關系資料庫管理系統(Relational Database Management System)》),RDBMS提供用戶與應用程式和資料庫之間的介面,以及用于管理資料存盤,訪問和性能的管理功能,

在資料庫型別和關系資料庫產品之間進行選擇時,有幾個因素可以指導您做出決定,您選擇的RDBMS將取決于您的業務需求,問問自己以下問題:

  • 我們的資料準確性要求是什么?資料存盤和準確性將取決于業務邏輯嗎?我們的資料對準確性是否有嚴格的要求(例如,財務資料和政府報告)?
  • 我們需要可擴展性嗎?要管理的資料規模是多少?預期的增長量是多少?資料庫模型是否需要支持鏡像資料庫副本(作為單獨的實體)以實作可伸縮性?如果是這樣,它可以在這些實體之間保持資料一致性嗎?
  • 并發有多重要?多個用戶和應用程式是否需要同時進行資料訪問?資料庫軟體在保護資料的同時是否支持并發?
  • 我們對性能和可靠性有何需求?我們需要高性能,高可靠性的產品嗎?查詢回應性能有哪些要求?供應商對服務水平協議(SLA)或計劃外停機的隔離是什么?

未來的關系資料庫


多年來,關系資料庫已經變得越來越好,越來越快,越來越強大并且更易于使用,但是它們也變得更加復雜,并且管理資料庫長期以來一直是一項全職作業,開發人員必須將大部分時間花在優化資料庫性能所需的管理活動上,而不是將他們的專業知識用于開發可為業務帶來價值的創新應用程式,

如今,自主技術正在利用關系模型的優勢來提供新型的關系資料庫,該資料庫(又稱獨立資料庫)維護權力和關系模型的優點,但采用人工智能(AI),機器學習和自動化監控和提高查詢性能和管理任務,例如,為了提高查詢性能,自動駕駛資料庫可以對索引進行假設和測驗,以加快查詢速度,然后將最佳查詢推入生產環境(全部依靠自己),自動駕駛資料庫無需人工干預即可連續進行這些改進,

自主技術使開發人員擺脫了管理資料庫的繁瑣任務,例如,他們不再需要預先確定基礎架構要求,相反,使用自動駕駛資料庫,他們可以根據需要添加存盤和計算資源以支持資料庫增長,僅需幾個步驟,開發人員就可以輕松創建自治的關系資料庫,從而加快了應用程式開發的時間,

非關系型資料庫 - Nosql介紹


Nosql的全稱是Not Only Sql,這個概念早起就有人提出,在09年的時候比較火,Nosql指的是非關系型資料庫,而我們常用的都是關系型資料庫,就像我們常用的mysql,sqlserver一樣,這些資料庫一般用來存盤重要資訊,應對普通的業務是沒有問題的,但是,隨著互聯網的高速發展,傳統的關系型資料庫在應付超大規模,超大流量以及高并發的時候力不從心,而就在這個時候,Nosql得到的告訴的發展,

人們使用“ NoSQL資料庫”一詞時,通常會使用它來指代任何非關系資料庫,有人說“ NoSQL”代表“非SQL”,而另一些人則說“不僅SQL”,無論哪種方式,大多數人都認為NoSQL資料庫是以關系表以外的格式存盤資料的資料庫,

一個常見的誤解是NoSQL資料庫或非關系資料庫不能很好地存盤關系資料,NoSQL資料庫可以存盤關系資料-它們與關系資料庫的存盤方式不同,實際上,與SQL資料庫相比,許多人發現NoSQL資料庫中的建模關系資料比SQL資料庫中的建模關系資料更容易,因為不必在表之間拆分相關資料,

NoSQL資料模型允許將相關資料嵌套在單個資料結構中,

隨著存盤成本的急劇下降,NoSQL資料庫出現在2000年代后期,僅出于減少資料重復的目的而創建復雜,難以管理的資料模型的日子已經一去不復返了,開發人員(而非存盤人員)已成為軟體開發的主要成本,因此NoSQL資料庫針對開發人員的生產力進行了優化, -- https://www.mongodb.com/nosql-explained

隨著存盤成本迅速降低,存盤和查詢所需的資料應用程式數量也增加了,這些資料具有各種形狀和大小(結構化,半結構化和多型性),因此預先定義架構幾乎變得不可能,NoSQL資料庫允許開發人員存盤大量非結構化資料,從而為他們提供了很大的靈活性,

此外,敏捷越來越受歡迎,軟體工程師也在重新考慮他們開發軟體的方式,他們認識到需要快速適應不斷變化的需求,他們需要能夠快速迭代并在整個軟體堆疊中進行更改(一直到資料庫模型)的能力,NoSQL資料庫為他們提供了這種靈活性,

云計算也越來越流行,開發人員開始使用公共云來托管其應用程式和資料,他們希望能夠在多個服務器和區域之間分布資料,以使其應用程式具有彈性,可以橫向擴展而不是縱向擴展以及對資料進行智能地理定位,一些NoSQL資料庫(如MongoDB)提供了這些功能,

NoSQL資料庫的型別是什么?

https://www.mongodb.com/nosql-explained


隨著時間的流逝,出現了四種主要的NoSQL資料庫型別: 檔案資料庫,鍵值資料庫,寬列存盤圖形資料庫,讓我們檢查每種型別,

  • 檔案資料庫將資料存盤在類似于JSON(JavaScript物件符號)物件的檔案中,每個檔案包含成對的欄位和值,這些值通常可以是多種型別,包括字串,數字,布林值,陣列或物件之類的東西,并且它們的結構通常與開發人員在代碼中使用的物件保持一致,由于它們的欄位值型別和強大的查詢語言多種多樣,因此檔案資料庫非常適合各種各樣的用例,并且可以用作通用資料庫,他們可以水平擴展以適應大資料量,根據DB引擎,MongoDB一直被評為全球最受歡迎的NoSQL資料庫,并且是檔案資料庫的一個示例,有關檔案資料庫的更多資訊,請訪問什么是檔案資料庫?,
  • 鍵值資料庫是一種較簡單的資料庫,其中每個專案都包含鍵和值,通常只能通過參考值來檢索值,因此學習如何查詢特定鍵值對通常很簡單,鍵值資料庫非常適合需要存盤大量資料但無需執行復雜查詢來檢索資料的用例,常見的用例包括存盤用戶首選項或快取,Redis和DynanoDB是流行的鍵值資料庫,
  • 寬列存盤將資料存盤在表,行和動態列中,寬列存盤提供了比關系資料庫更大的靈活性,因為不需要每一行都具有相同的列,許多人認為寬列存盤是二維鍵值資料庫,寬列存盤非常適合需要存盤大量資料并且可以預測查詢模式的情況,寬列存盤通常用于存盤物聯網資料和用戶組態檔資料,Cassandra和HBase是最受歡迎的兩家寬列商店,
  • 圖形資料庫將資料存盤在節點和邊中,節點通常存盤有關人物,地點和事物的資訊,而邊緣則存盤有關節點之間的關系的資訊,在需要遍歷關系以查找模式(例如社交網路,欺詐檢測和推薦引擎)的用例中,圖形資料庫非常出色,Neo4j和JanusGraph是圖形資料庫的示例,

NoSQL資料庫如何作業

https://www.mongodb.com/nosql-explained


從設計角度理解NoSQL資料庫的吸引力的一種方法是,在使用地址資料的過于簡化的示例中,查看SQL和NoSQL資料庫的資料模型的外觀,

SQL案例, 對于SQL資料庫,從地址的邏輯結構開始建立用于地址的資料庫,并且期望要存盤的記錄將保持相對不變,在分析了預期的查詢模式之后,SQL資料庫可能會優化兩個表中的存盤,一個用于基本資訊,另一個用于成為客戶,姓氏是兩個表的鍵,每個表中的每一行都是一個客戶,每列具有以下固定屬性:

  • 姓氏::名字::中間名首字母::地址欄位::電子郵件地址::電話號碼
  • 姓氏::生日::帳號::客戶年份::溝通偏好

NoSQL案例,在上面的NoSQL資料庫型別一節中,描述了四種型別,每種都有自己的資料模型,

每種NoSQL資料庫的設計都應考慮到特定的客戶情況,并且會因技術原因而組織每種型別的資料庫,描述最簡單的型別是檔案資料庫,在其中將基本資訊和客戶資訊都組合在一個JSON檔案中是很自然的,在這種情況下,每個SQL列屬性將是欄位,而客戶記錄的詳細資訊將是與每個欄位關聯的資料值,

例如:Last_name: "Jones", First_name: "Mary", Middle_initial: "S",等等

嘗試NoSQL資料庫

如果您想嘗試NoSQL資料庫,MongoDB Atlas是一個不錯的起點,Atlas是由MongoDB完全管理的資料庫服務,并且在所有領先的云提供商中都可用,阿特拉斯(Atlas)有一個永久的層,您可以用來踢輪胎并了解基礎知識,當您準備超越免費套餐時,可以使用代碼NOSQLEXPLAINED獲得200美元的Atlas積分,

不確定擁有Atlas帳戶后該怎么辦?前往MongoDB大學,您可以從MongoDB工程師那里獲得免費的在線培訓,MongoDB大學的課程注冊已超過140萬,該快速入門教程是另一個偉大的地方開始,因為他們會幫助你起床,并與喜愛的編程語言快速運行,

Nosql和關系型資料庫的區別


1.存盤方式

  關系型資料庫是表格式的,因此存盤在表的行和列中,他們之間很容易關聯協作存盤,提取資料很方便,而Nosql資料庫則與其相反,他是大塊的組合在一起,通常存盤在資料集中,就像檔案、鍵值對或者圖結構,

2.存盤結構

  關系型資料庫對應的是結構化資料,資料表都預先定義了結構(列的定義),結構描述了資料的形式和內容,這一點對資料建模至關重要,雖然預定義結構帶來了可靠性和穩定性,但是修改這些資料比較困難,而Nosql資料庫基于動態結構,使用與非結構化資料,因為Nosql資料庫是動態結構,可以很容易適應資料型別和結構的變化,

3.存盤規范

  關系型資料庫的資料存盤為了更高的規范性,把資料分割為最小的關系表以避免重復,獲得精簡的空間利用,雖然管理起來很清晰,但是單個操作設計到多張表的時候,資料管理就顯得有點麻煩,而Nosql資料存盤在平面資料集中,資料經常可能會重復,單個資料庫很少被分隔開,而是存盤成了一個整體,這樣整塊資料更加便于讀寫

4.存盤擴展

  這可能是兩者之間最大的區別,關系型資料庫是縱向擴展,也就是說想要提高處理能力,要使用速度更快的計算機,因為資料存盤在關系表中,操作的性能瓶頸可能涉及到多個表,需要通過提升計算機性能來克服,雖然有很大的擴展空間,但是最侄訓達到縱向擴展的上限,而Nosql資料庫是橫向擴展的它的存盤天然就是分布式的,可以通過給資源池添加更多的普通資料庫服務器來分擔負載,

橫向擴展是已擴展服務器的數量進行高并發的處理(增強處理業務的能力)

根據配置nginx的反向代理,轉發服務器(配置的ip)進行輪換處理業務(可加入負載均衡器進行分發請求)

縱向擴展,是增加單機的處理能力,一般增加cpu的處理能力

5.查詢方式

  關系型資料庫通過結構化查詢語言來操作資料庫(就是我們通常說的SQL),SQL支持資料庫CURD操作的功能非常強大,是業界的標準用法,而Nosql查詢以塊為單元操作資料,使用的是非結構化查詢語言(UnQl),它是沒有標準的,關系型資料庫表中主鍵的概念對應Nosql中存盤檔案的ID,關系型資料庫使用預定義優化方式(比如索引)來加快查詢操作,而Nosql更簡單更精確的資料訪問模式,

6.事務

  關系型資料庫遵循ACID規則(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)),而Nosql資料庫遵循BASE原則(基本可用(Basically Availble)、軟/柔性事務(Soft-state )、最終一致性(Eventual Consistency)),由于關系型資料庫的資料強一致性,所以對事務的支持很好,關系型資料庫支持對事務原子性細粒度控制,并且易于回滾事務,而Nosql資料庫是在CAP(一致性、可用性、磁區容忍度)中任選兩項,因為基于節點的分布式系統中,很難全部滿足,所以對事務的支持不是很好,雖然也可以使用事務,但是并不是Nosql的閃光點,

7.性能

  關系型資料庫為了維護資料的一致性付出了巨大的代價,讀寫性能比較差,在面對高并發讀寫性能非常差,面對海量資料的時候效率非常低,而Nosql存盤的格式都是key-value型別的,并且存盤在記憶體中,非常容易存盤,而且對于資料的 一致性是 弱要求,Nosql無需sql的決議,提高了讀寫性能,

8.授權方式

  關系型資料庫通常有SQL Server,Mysql,Oracle,主流的Nosql資料庫有redis,memcache,MongoDb,大多數的關系型資料庫都是付費的并且價格昂貴,成本較大,而Nosql資料庫通常都是開源的,

柔性事務滿足Base理論(基本可用、最終一致性)、CAP理論,

剛性事務滿足ACID理論,

ACID理論


1. 原子性


原子性是指事務是一個不可再分割的作業單元,事務中的操作要么都發生,要么都不發生,可采用“A向B轉賬”這個例子來說明解釋,在DBMS中,默認情況下一條SQL就是一個單獨事務,事務是自動提交的,只有顯式的使用start transaction開啟一個事務,才能將一個代碼塊放在事務中執行,

2. 一致性


一致性是指在事務開始之前和事務結束以后資料庫的完整性約束沒有被破壞,這是說資料庫事務不能破壞關系資料的完整性以及業務邏輯上的一致性

如A給B轉賬,不論轉賬的事務操作是否成功,其兩者的存款總額不變(這是業務邏輯的一致性,至于資料庫關系約束的完整性就更好理解了),

保障機制(也從兩方面著手):資料庫層面會在一個事務執行之前和之后,資料會符合你設定的約束唯一約束,外鍵約束,check約束等)和觸發器設定;此外,資料庫的內部資料結構(如 B 樹索引或雙向鏈表)都必須是正確的,業務的一致性一般由開發人員進行保證,亦可轉移至資料庫層面,

3. 隔離性


多個事務并發訪問時,事務之間是隔離的,一個事務不應該影響其它事務運行效果,

在并發環境中,當不同的事務同時操縱相同的資料時,每個事務都有各自的完整資料空間,由并發事務所做的修改必須與任何其他并發事務所做的修改隔離,事務查看資料更新時,資料所處的狀態要么是另一事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看到中間狀態的資料

事務最復雜問題都是由事務隔離性引起的,完全的隔離性是不現實的,完全的隔離性要求資料庫同一時間只執行一條事務,這樣會嚴重影響性能,

關于隔離性中的事務隔離等級(事務之間影響),參見相應博文

4. 持久性


這是最好理解的一個特性:持久性,意味著在事務完成以后,該事務所對資料庫所作的更改便持久的保存在資料庫之中,并不會被回滾,(完成的事務是系統永久的部分,對系統的影響是永久性的,該修改即使出現致命的系統故障也將一直保持)

write ahead logging:SQL Server中使用了WAL(Write-Ahead Logging)技術來保證事務日志的ACID特性,在資料寫入到資料庫之前,先寫入到日志,再將日志記錄變更到存盤器中,

Redis,Memcache,MongoDb的特點與區別


Redis


優點

  • 1.支持多種資料結構,如 string(字串)、 list(雙向鏈表)、dict(hash表)、set(集合)、zset(排序set)、
  • 2.支持持久化操作,可以進行aof及rdb資料持久化到磁盤,從而進行資料備份或資料恢復等操作,較好的防止資料丟失  的手段,
  • 3.支持通過Replication進行資料復制,通過master-slave機制,可以實時進行資料的同步復制,支持多級復制和增量復制,master-slave機制是Redis進行HA的重要手段,
  • 4.單執行緒請求,所有命令串行執行,并發情況下不需要考慮資料一致性問題,
  • 5.支持pub/sub訊息訂閱機制,可以用來進行訊息訂閱與通知,
  • 6.支持簡單的事務需求,但業界使用場景很少,并不成熟,

缺點

  • 1.Redis只能使用單執行緒,性能受限于CPU性能,故單實體CPU最高才可能達到5-6wQPS每秒(取決于資料結構,資料大小以及服務器硬體性能,日常環境中QPS高峰大約在1-2w左右),
  • 2.支持簡單的事務需求,但業界使用場景很少,并不成熟,既是優點也是缺點,
  • 3.Redis在string型別上會消耗較多記憶體,可以使用dict(hash表)壓縮存盤以降低記憶體耗用,

Memcache


優點

  • 1.Memcached可以利用多核優勢,單實體吞吐量極高,可以達到幾十萬QPS(取決于key、value的位元組大小以及服務器硬體性能,日常環境中QPS高峰大約在4-6w左右),適用于最大程度扛量,
  • 2.支持直接配置為session handle,

缺點

  • 1只支持簡單的key/value資料結構,不像Redis可以支持豐富的資料型別,
  • 2.無法進行持久化,資料不能備份,只能用于快取使用,且重啟后資料全部丟失,
  • 3.無法進行資料同步,不能將MC中的資料遷移到其他MC實體中,
  • 4.Memcached記憶體分配采用Slab Allocation機制管理記憶體,value大小分布差異較大時會造成記憶體利用率降低,并引發低利用率時依然出現踢出等問題,需要用戶注重value設計,

MongoDB


優點

  • 1.更高的寫負載,MongoDB擁有更高的插入速度,
  • 2.處理很大的規模的單表,當資料表太大的時候可以很容易的分割表,
  • 3.高可用性,設定M-S不僅方便而且很快,MongoDB還可以快速、安全及自動化的實作節點(資料中心)故障轉移,
  • 4.快速的查詢,MongoDB支持二維空間索引,比如管道,因此可以快速及精確的從指定位置獲取資料,MongoDB在啟動后會將資料庫中的資料以檔案映射的方式加載到記憶體中,如果記憶體資源相當豐富的話,這將極大地提高資料庫的查詢速度,
  • 5.非結構化資料的爆發增長,增加列在有些情況下可能鎖定整個資料庫,或者增加負載從而導致性能下降,由于MongoDB的弱資料結構模式,添加1個新欄位不會對舊表格有任何影響,整個程序會非常快速,

缺點

  • 1.不支持事務,
  • 2.MongoDB占用空間過大 ,
  • 3.MongoDB沒有成熟的維護工具,

Redis、Memcache和MongoDB的區別


1.性能

  • 三者的性能都比較高,總的來講:Memcache和Redis差不多,要高于MongoDB,

2.便利性

  • memcache資料結構單一,
  • redis豐富一些,資料操作方面,redis更好一些,較少的網路IO次數,
  • mongodb支持豐富的資料表達,索引,最類似關系型資料庫,支持的查詢語言非常豐富,

3.存盤空間

  • redis在2.0版本后增加了自己的VM特性,突破物理記憶體的限制;可以對key value設定過期時間(類似memcache),
  • memcache可以修改最大可用記憶體,采用LRU演算法,
  • mongoDB適合大資料量的存盤,依賴作業系統VM做記憶體管理,吃記憶體也比較厲害,服務不要和別的服務在一起,

4.可用性

  • redis,依賴客戶端來實作分布式讀寫;主從復制時,每次從節點重新連接主節點都要依賴整個快照,無增量復制,因性能和效率問題,所以單點問題比較復雜;不支持自動sharding,需要依賴程式設定一致hash 機制,一種替代方案是,不用redis本身的復制機制,采用自己做主動復制(多份存盤),或者改成增量復制的方式(需要自己實作),一致性問題和性能的權衡,
  • Memcache本身沒有資料冗余機制,也沒必要;對于故障預防,采用依賴成熟的hash或者環狀的演算法,解決單點故障引起的抖動問題,
  • mongoDB支持master-slave,replicaset(內部采用paxos選舉演算法,自動故障恢復),auto sharding機制,對客戶端屏蔽了故障轉移和切分機制,

5.可靠性

  • redis支持(快照、AOF):依賴快照進行持久化,aof增強了可靠性的同時,對性能有所影響,
  • memcache不支持,通常用在做快取,提升性能,
  • MongoDB從1.8版本開始采用binlog方式支持持久化的可靠性,

6.一致性

  • Memcache 在并發場景下,用cas保證一致性,
  • redis事務支持比較弱,只能保證事務中的每個操作連續執行,
  • mongoDB不支持事務,

7.資料分析

  • mongoDB內置了資料分析的功能(mapreduce),其他兩者不支持,

8.應用場景

  • redis:資料量較小的更性能操作和運算上,
  • memcache:用于在動態系統中減少資料庫負載,提升性能;做快取,提高性能(適合讀多寫少,對于資料量比較大,可以采用sharding),
  • Mongodb:主要解決海量資料的訪問效率問題

Redis 簡介


Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key-value資料庫,

Redis 與其他 key - value 快取產品有以下三個特點:

  • Redis支持資料的持久化,可以將記憶體中的資料保存在磁盤中,重啟的時候可以再次加載進行使用,
  • Redis不僅僅支持簡單的key-value型別的資料,同時還提供list,set,zset,hash等資料結構的存盤,
  • Redis支持資料的備份,即master-slave模式的資料備份,

Redis 優勢


  • 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s ,
  • 豐富的資料型別 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料型別操作,
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功執行要么失敗完全不執行,單個操作是原子性的,多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來,
  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性,

《Redis架構概述》https://rtoax.blog.csdn.net/article/details/107917429

《Redis與Memcached的對比》https://rtoax.blog.csdn.net/article/details/108614104

《Redis與MySQL的雙劍合璧,一文讀懂redis》https://rtoax.blog.csdn.net/article/details/108614373

《Redis快取持久化:RDB持久化和AOF持久化》https://rtoax.blog.csdn.net/article/details/108729843

《Redis:使用Redis的分布式鎖》https://rtoax.blog.csdn.net/article/details/108657676

相關NoSQL資源

  • NoSQL和SQL之間的主要區別是什么?
  • 什么時候應該使用NoSQL資料庫?
  • NoSQL資料庫有4種不同型別?
  • NoSQL資料庫的優點是什么?
  • NoSQL資料建模和模式設計
  • 探索NoSQL資料庫示例

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/170130.html

標籤:其他

上一篇:Redis使用RedisTemplate模板類的常用操作

下一篇:秋招Java崗成功斬獲招商、位元組、快手等Offer!自爆備戰秋招的資源庫,全部開源!

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more