天天看點

MongoDB介紹

傳統的關系型資料庫(如MySQL),在資料操作的“三高”需求以及應對Web2.0的網站需求面前,顯得力不從心。

解釋:“三高”需求:

• High performance - 對資料庫高并發讀寫的需求。

• Huge Storage - 對海量資料的高效率存儲和通路的需求。

• High Scalability && High Availability- 對資料庫的高可擴充性和高可用性的需求。

而MongoDB可應對“三高”需求。

具體的應用場景如:

1)社交場景,使用 MongoDB 存儲存儲使用者資訊,以及使用者發表的朋友圈資訊,通過地理位置索引實作附近的人、地點等功能。

2)遊戲場景,使用 MongoDB 存儲遊戲使用者資訊,使用者的裝備、積分等直接以内嵌文檔的形式存儲,友善查詢、高效率存儲和通路。

3)物流場景,使用 MongoDB 存儲訂單資訊,訂單狀态在運送過程中會不斷更新,以 MongoDB 内嵌數組的形式來存儲,一次查詢就能将

訂單所有的變更讀取出來。

4)物聯網場景,使用 MongoDB 存儲所有接入的智能裝置資訊,以及裝置彙報的日志資訊,并對這些資訊進行多元度的分析。

5)視訊直播,使用 MongoDB 存儲使用者資訊、點贊互動資訊等。

這些應用場景中,資料操作方面的共同特點是:

(1)資料量大

(2)寫入操作頻繁(讀寫都很頻繁)

(3)價值較低的資料,對事務性要求不高

對于這樣的資料,我們更适合使用MongoDB來實作資料的存儲。

在架構選型上,除了上述的三個特點外,如果你還猶豫是否要選擇它?可以考慮以下的一些問題:

應用不需要事務及複雜 join 支援

新應用,需求會變,資料模型無法确定,想快速疊代開發

應用需要2000-3000以上的讀寫QPS(更高也可以)

應用需要TB甚至 PB 級别資料存儲

應用發展迅速,需要能快速水準擴充

應用要求存儲的資料不丢失

應用需要99.999%高可用

應用需要大量的地理位置查詢、文本查詢

如果上述有1個符合,可以考慮 MongoDB,2個及以上的符合,選擇 MongoDB 絕不會後悔。

思考:如果用MySQL呢?

答:相對MySQL,可以以更低的成本解決問題(包括學習、開發、運維等成本)

MongoDB是一個開源、高性能、無模式的文檔型資料庫,當初的設計就是用于簡化開發和友善擴充,是NoSQL資料庫産品中的一種。是最

像關系型資料庫(MySQL)的非關系型資料庫。

它支援的資料結構非常松散,是一種類似于 JSON 的 格式叫BSON,是以它既可以存儲比較複雜的資料類型,又相當的靈活。

MongoDB中的記錄是一個文檔,它是一個由字段和值對(field:value)組成的資料結構。MongoDB文檔類似于JSON對象,即一個文檔認

為就是一個對象。字段的資料類型是字元型,它的值除了使用基本的一些類型外,還可以包括其他文檔、普通數組和文檔數組

MySQL和MongoDB對比

MongoDB介紹
MongoDB介紹

MongoDB的最小存儲機關就是文檔(document)對象。文檔(document)對象對應于關系型資料庫的行。資料在MongoDB中以BSON(Binary-JSON)文檔的格式存儲在磁盤上。

BSON(Binary Serialized Document Format)是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON。BSON和JSON一樣,支援内嵌的文檔對象和數組對象,但是BSON有JSON沒有的一些資料類型,如Date和BinData類型。

BSON采用了類似于 C 語言結構體的名稱、對表示方法,支援内嵌的文檔對象和數組對象,具有輕量性、可周遊性、高效性的三個特點,可以有效描述非結構化資料和結構化資料。這種格式的優點是靈活性高,但它的缺點是空間使用率不是很理想。

Bson中,除了基本的JSON類型:string,integer,boolean,double,null,array和object,mongo還使用了特殊的資料類型。這些類型包括date,object id,binary data,regular expression 和code。每一個驅動都以特定語言的方式實作了這些類型,檢視你的驅動的文檔來擷取詳細資訊。

BSON資料類型參考清單:

MongoDB介紹

提示:

shell預設使用64位浮點型數值。{“x”:3.14}或{“x”:3}。對于整型值,可以使用NumberInt(4位元組符号整數)或NumberLong(8位元組符号整數),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}

MongoDB主要有如下特點:

(1)高性能:

MongoDB提供高性能的資料持久性。特别是對嵌入式資料模型的支援減少了資料庫系統上的I/O活動。索引支援更快的查詢,并且可以包含來自嵌入式文檔和數組的鍵。(文本索引解決搜尋的需求、TTL索引解決曆史資料自動過期的需求、地理位置索引可用于建構各種 O2O 應用)mmapv1、wiredtiger、mongorocks(rocksdb)、in-memory 等多引擎支援滿足各種場景需求。Gridfs解決檔案存儲的需求。

(2)高可用性:

MongoDB的複制工具稱為副本集(replica set),它可提供自動故障轉移和資料備援。

(3)高擴充性:

MongoDB提供了水準可擴充性作為其核心功能的一部分。分片将資料分布在一組叢集的機器上。(海量資料存儲,服務能力水準擴充)

從3.4開始,MongoDB支援基于片鍵建立資料區域。在一個平衡的叢集中,MongoDB将一個區域所覆寫的讀寫隻定向到該區域内的那些片。

(4)豐富的查詢支援:

MongoDB支援豐富的查詢語言,支援讀和寫操作(CRUD),比如資料聚合、文本搜尋和地理空間查詢等。

(5)其他特點:如無模式(動态模式)、靈活的文檔模型