MongoDB介紹


1. NoSQL簡介

  • NoSQL(NoSQL = Not Only SQL ),非關系型數據庫,也意"not only SQL"。
  • 通過應用實踐證明,關系模型是非常適合於客戶服務器編程,遠遠超出預期的利益,今天它是結構化數據存儲在網絡和商務應用的主導技術。

1.1 RDBMS vs NoSQL

RDBMS(關系數據庫管理系統)

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

NoSQL

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

1.3 RDBMS vs NoSQL事務特性

RDBMS:ACID

  • A (Atomicity) 原子性
  • C (Consistency) 一致性
  • I (Isolation) 獨立性
  • D (Durability) 持久性

NoSQL:CAP

CAP定理(CAP theorem)

在計算機科學中, CAP定理(CAP theorem), 又被稱作 布魯爾定理(Brewer's theorem), 它指出對於一個分布式計算系統來說,不可能同時滿足以下三點:

  • 一致性(Consistency) (所有節點在同一時間具有相同的數據)
  • 可用性(Availability) (保證每個請求不管成功或者失敗都有響應)
  • 分隔容忍(Partition tolerance) (系統中任意信息的丟失或失敗不會影響系統的繼續運作)

CAP理論的核心是:一個分布式系統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多只能同時較好的滿足兩個。

因此,根據 CAP 原理將 NoSQL 數據庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:

  • CA - 單點集群,滿足一致性,可用性的系統,通常在可擴展性上不太強大。
  • CP - 滿足一致性,分區容忍性的系統,通常性能不是特別高。
  • AP - 滿足可用性,分區容忍性的系統,通常可能對一致性要求低一些。

注意:redis 和 MongoDB 均滿足CP原則。

NoSQL:BASE

BASE:Basically Available, Soft-state, Eventually Consistent。

CAP理論的核心是:一個分布式系統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多只能同時較好的滿足兩個。

BASE是NoSQL數據庫通常對可用性及一致性的弱要求原則:

  • Basically Availble --基本可用
  • Soft-state --軟狀態/柔性事務。 "Soft state" 可以理解為"無連接"的, 而 "Hard state" 是"面向連接"的
  • Eventual Consistency -- 最終一致性, 也是是 ACID 的最終目的。

1.2 NoSQL優缺點

NoSQL的優點/缺點
優點:

  • 高可擴展性
  • 分布式計算
  • 低成本
  • 架構的靈活性,半結構化數據
  • 沒有復雜的關系

缺點:

  • 沒有標准化
  • 有限的查詢功能(到目前為止)
  • 最終一致是不直觀的程序

2. MongoDB簡介

  • NoSQL中一種
  • 對比redis為key-value存儲類型,MongoDB是文檔型數據庫
  • MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成,字段值可以包含其他文檔,數組及文檔數組。
  • MongoDB 文檔類似於 JSON 對象,是BSON(二進制Binary JSON)

如:

{
    name : "sue",
    age : 26,
    groups : ["news", "sports"]
}

2.1 主要特點

  • MongoDB 是一個面向文檔存儲的數據庫,操作起來比較簡單和容易。
  • 你可以在MongoDB記錄中設置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現更快的排序。
  • 你可以通過本地或者網絡創建數據鏡像,這使得MongoDB有更強的擴展性。
  • 如果負載的增加(需要更多的存儲空間和更強的處理能力) ,它可以分布在計算機網絡中的其他節點上這就是所謂的分片。
  • Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
  • MongoDb 使用update()命令可以實現替換完成的文檔(數據)或者一些指定的數據字段 。
  • Mongodb中的Map/reduce主要是用來對數據進行批量處理和聚合操作。
  • Map和Reduce。Map函數調用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數進行處理。
  • Map函數和Reduce函數是使用Javascript編寫的,並可以通過db.runCommand或mapreduce命令來執行MapReduce操作。
  • GridFS是MongoDB中的一個內置功能,可以用於存放大量小文件。
  • MongoDB允許在服務端執行腳本,可以用Javascript編寫某個函數,直接在服務端執行,也可以把函數的定義存儲在服務端,下次直接調用即可。
  • MongoDB支持各種編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
  • MongoDB安裝簡單。

2.2 概念解析

SQL術語/概念 MongoDB術語/概念 解釋/說明
database database 數據庫
table collection 數據庫表/集合
row document 數據記錄行/文檔
column field 數據字段/域
index index 索引
table joins 表連接,MongoDB不支持
primary key primary key 主鍵,MongoDB自動將_id字段設置為主鍵

3. MongoDB和Redis的區別是什么

MongoDB 更類似 MySQL,支持字段索引、游標操作,其優勢在於查詢功能比較強大,擅長查詢 JSON 數據,能存儲海量數據,但是不支持事務。

Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,支持多種類型的數據結構,可用作數據庫,高速緩存和消息隊列代理。

1、內存管理機制

Redis 數據全部存在內存,定期寫入磁盤,當內存不夠時,可以選擇指定的 LRU 算法刪除數據。

MongoDB 數據存在內存,由 linux系統 mmap 實現,當內存不夠時,只將熱點數據放入內存,其他數據存在磁盤。

2、支持的數據結構

Redis 支持的數據結構豐富,包括hash、set、list等。

MongoDB 數據結構比較單一,但是支持豐富的數據表達,索引,最類似關系型數據庫,支持的查詢語言非常豐富。

3、數據量和性能

當物理內存夠用的時候,redis>mongodb>mysql

當物理內存不夠用的時候,redis和mongodb都會使用虛擬內存。

實際上如果redis要開始虛擬內存,那很明顯要么加內存條,要么你換個數據庫了。

但是,mongodb不一樣,只要,業務上能保證,冷熱數據的讀寫比,使得熱數據在物理內存中,mmap的交換較少。

mongodb還是能夠保證性能。

4、性能

mongodb依賴內存,TPS較高;Redis依賴內存,TPS非常高。性能上Redis優於MongoDB。

5、可靠性

mongodb從1.8版本后,采用binlog方式(MySQL同樣采用該方式)支持持久化,增加可靠性;

Redis依賴快照進行持久化;AOF增強可靠性;增強可靠性的同時,影響訪問性能。

可靠性上MongoDB優於Redis。

6、數據分析

mongodb內置數據分析功能(mapreduce);而Redis不支持。

7、事務支持情況

Redis 事務支持比較弱,只能保證事務中的每個操作連續執行;mongodb不支持事務。

8、集群

MongoDB 集群技術比較成熟,Redis從3.0開始支持集群。

參考鏈接:
https://www.runoob.com/mongodb/nosql.html
https://www.php.cn/redis/421928.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM