前言 導師讓我看一些NoSQL資料,于是目標鎖定了mongodb,至于為什么,很簡單,發現了一些不錯的資料。看了一些資料,有一些想法或者讀后感吧,記下來,以備回憶。 簡介 MongoDB是面向集合、模式自由的文檔型數據庫。 面向集合(collection),文檔(document)而
前言
導師讓我看一些nosql資料,于是目標鎖定了mongodb,至于為什么,很簡單,發現了一些不錯的資料??戳艘恍┵Y料,有一些想法或者讀后感吧,記下來,以備回憶。
簡介
MongoDB是面向集合、模式自由的文檔型數據庫。
面向集合(collection),文檔(document)而不是面向表(table),行(row)。文檔型數據庫是指數據庫里面的數據庫格式是BSON,與Json有些類似。MongoDB只是NoSQL的一種,那么為什么要用非關系型數據庫呢?
邏輯結構和存儲結構
邏輯結構:
?
關系型數據庫:一個數據庫實例包含多個database,一個database包含多個table,一個table包括多個rows。
MongoDB:一個MongoDB實例包含多個database,一個database包括多個collection,一個collection包括多個document。
?
存儲結構:
關系型數據庫:創建一個普通數據庫生成兩個文件:.mdf,.ldf。
MongoDB: 創建一個普通數據庫生成兩個文件.ns,.0文件。
此文詳細介紹MongoDB數據文件內部結構以及
應用
MongoDB自帶交互式Javascript Shell,用來對MongoDB進行操作和管理,而且許多MongoDB愛好者也寫了許多GUI MongoDB管理軟件。MongoDB Shell相較于MongoDB GUIs更底層一些,封閉的更少些,因此更靈活,也更能了解原理,學起來也不是很難。
博客園的一線碼農寫了一個MongoDB系列很不錯,里面介紹了MongoDB 的CURD操作,聚合函數,索引等相關知識。
?
架構
先知道what,再知道how,最后還得知道why。
介紹的很好。
1. Replica Sets 副本集
即MongoDB在多個服務器上備份數據。有一個primary DB,用戶只能向primary DB寫入數據,網站空間,但是可以從多個服務器讀取數據庫,從而可以實現讀寫分離。而Primary DB和 Secondary DB之間保持著心跳同步檢測,保持數據庫的一致性。當Primary DB宕機,有仲裁服務器會從Secondary 中選出一個來充當 Primary DB。
2. Auto-Sharding 自動分片
如果一個數據太大,磁盤吃緊,美國空間,需要對數據進行分片。
3.Auto-Sharding + Replica Sets
如此,不但可以解決海量存儲和動態擴容問題,而且還可以實現高可靠,高并發。
每個Shard都是集群,
Shard1在三個服務器上都存在,可以提高可靠性,容錯能力,備份恢復能力。
config在三個服務器上,也是同理,為了可靠的保存分片的元數據。
mongos在3個服務器上,可實現負載平衡,提高客戶端接入性能。
步驟:客戶端發起請求,有3個路由進程之一接收并解析命令,然后根據config服務器記錄的分片元數據來確定需要接收客戶端命令的分片。
服務器的具體配置可以參考 一線碼農系列
MongoDB驅動
在實際編程中,你當然可以使用process調用cmd命令來操作和管理MongoDB,但是太麻煩了,還是下載驅動方便方便,MongoDB驅動多著,當然會有C#,有官方,也有非官方的。 ?
優劣勢
優劣勢自然是和關系型數據庫對比了
參考MongoDB調查總結
MongoDB 身上的優勢和劣勢
自我總結
學起來挺輕松的,也許接觸的還不深,沒有經過大型項目實戰,但是學著一直有種和充實的感覺,那就是我知道為什么會這樣,也許是開源的原因吧。NoSQL和關系型數據庫各有優勢,并立共存,香港虛擬主機,適用于不同的項目中。比如,Mongo不支持事務,對于銀行轉賬之類的自然不適用;但是在web2.0時代,NoSQL的角色愈來愈重要了,NoSQL的優勢也是為web2.0而生的。
參考資料
1. NoSQLFan? MongoDB資料匯總專題?? 略顯雜亂
2. MongoDB 官網? MongoDB手冊? 權威,英文