SlideShare a Scribd company logo
Mongo DB 簡介
What is NoSQL?Why NoSQL
MongoDB Introduction
MongoDB HA
MongoDB C# Driver
MongoDB Install & Setup
What is NoSQL?Why NoSQL
MongoDB Introduction
MongoDB HA
MongoDB C# Driver
MongoDB Install & Setup
Relational Database的瓶頸
0 Lock機制保證ACID
0 Query cache為Table等級
0 Shema 固定
0 連線數無法應付訪問量的增加
0 資料量大時IO壓力沉重
0 未來連線數只會越來越大,資料量只會越來越多
0 擴展不易
RDB+Memcached
0 傳統的文件快取不能多台Server共享
0 大量的的小資料快取還是有很大的IO壓力
0 內部網路速度越來越快
0 記憶體越來越便宜
0 Memcached變成一種很流行很實用的技術
Memcached(1/3)
Memcached(2/3)
Memcached

Memcached

演算法

函式庫

應用程式

Memcached
Memcached(3/3)
0 高性能
0 分散式儲存
0 Name-Value Pair
0 Key 的長度被限制在 250 characters
0 儲存的資料不能超過 1 megabyte
0 沒有分散式運算控制器,透過儲存時的演算法達成分

散式
0 只能分擔讀取的壓力
NoSQL(1/6)
0 去掉Relation DB的關聯特性,不嚴謹的保證ACID
0 數據間無關聯,可分散式儲存,且增加擴展性
0 不用考慮關聯性,增加讀寫性能
0 Cache為記錄級的,非table級,粒度較小
0 無固定的Schema,除去大量資料在修改schema時的

效能影響
0 節省開發成本及維護成本
0 不支援SQL
0 不保證Transaction
NoSQL(2/6)
0 適合
0 大量寫入跟更新的資料,資料無需進行關聯式操作,
EX:LOG類型,使用者操作紀錄、系統運行記錄,簡訊
發送記錄
0 大尺寸但低價值的資料,NoSQL成本較低。
0 需要大量分散式存取的資料,可支援MapReduce,存取
數十或數百台資料伺服器
0 不適合
0 交易一致性需求高的, NoSQL不嚴謹保證ACID
0 需要關聯性儲存的資料
0 要使用傳統SQL的solution
NoSQL(3/6)
儲存類型

NoSQL DB

Doucument MongoDB(10 gen)
CouchDB(Apache)

特性
使用JSON格式來儲存,內容為Document
型,因此可以對某些屬性建立索引,來
實現一些RDB的功能

Row

Hbase(Hadoop)
使用row方式來儲存,最大特性是方便儲
Cassandra(Facebook) 存結構化和半結構化數據,方便做數據
Hypertable
壓縮,針對一列或某幾列的查詢有很大
的IO優勢

Key-Value

Redis(VMware)
Flare(green.jp)
SimpleDB(Amazon)

可透過鍵值快速找的值,對值的內容格
式不加以限制

Graph

Neo4J
FlockDB(Twitter)

方便用來儲存大量的圖片數據
NoSQL(4/6)
0 RDB已死?
0 NoSQL vs. RDB
0 功能
0 性能
0 擴展
0 NoSQL+RDB
0 選擇適合的NoSQL
0 資料結構、數據特性
0 Insert、Update的比例
0 查詢的需求
NoSQL(5/6)
0 RDB專門負責處理擅長的關係存儲,NoSQL作為資

料的存儲
0 節省RDB的IO開銷
0 提高SQL cache的hit rate
0 提昇RDB主從同步效率
0 提昇RDB備份與恢復效率
0 提高擴展性及系統承載量
NoSQL(6/6)

NOSQL
Mongo db 簡介
Mongo db 簡介
What is NoSQL?Why NoSQL
MongoDB Introduction
MongoDB HA
MongoDB C# Driver
MongoDB Install & Setup
MongoDB(1/3)
0 open source
0 C++開發
0 高性能
0 無Schema
0 Doucument儲存
0 存儲格式為BSON(一種JSON的擴展)
0 支持RUBY,PYTHON,JAVA,PHP,C++,C#等多種語言
MongoDB(2/3)
0 支援索引的建立
0 支援動態查詢
0 支援replica與Sharding
0 使用高效的二進位資料存儲,包括大型物件(如影

片)
0 BSON格式的資料(文檔)存儲有尺寸限制,最大為16M
0 MongoDB可運行在Linux、Windows或OS X平台,
支援32位和64位應用,默認埠為27017。推薦運行在
64位平台,因為MongoDB在32位元模式運行時支援
的最大檔尺寸為2GB
MongoDB(3/3)
0 Memory-mapped file
0 服務本身佔據很少資源、但Memory-mapped會佔用

大量內存。
MongoDB結構(1/7)
0 邏輯結構關系對比
 關係型資料庫:MSSQL資料庫(database)、表

(table)、記錄(rows) 三個層次概念組成。
 非關係型數據庫:MongoDB 資料庫(database)、集合
(collection)、文檔對象(document)三個層次概念組成。
 MongoDB 裡的集合對應於關係型數據庫裡的表,但是
集合中沒有列、行和關係的概念,集合中只有
document,一個document就相當與一條記錄,這實現
了無Schema的特點。
MongoDB結構(2/7)
MongoDB結構(3/7)
0 MongoDB的document使用BSON(Binary JSON)

來組織資料,BSON類似於JSON,JSON只是一種
簡單的表示資料的方式,只包含了6種資料類型(null、
布林、數位、字串、陣列及物件),不能完全滿足複
雜的需要,因此,BSON還提供日期、32位元數字、
64位元數位等類型
MongoDB結構(4/7)
0 null

null類型用於表示空值或不存在的欄位
如:{“one”:null}
0 boolean

布林類型有兩種值,’true’和’false’
如:{“one”:true}
0 32位元整數

mongoDB的控制台使用JS引擎進行輸入,而JS僅支
持64位浮點數,所以32位元整數將會被自動轉義。
0 64位元整數

64位元整數與32位元整數一樣,在MongoDB控制台使用
時,會轉義成64位浮點數
MongoDB結構(5/7)
0 64位浮點數

MongoDB控制台數位的預設類型。
如:{“one”:2.02} {“one”:10}
0 字符串

UTF-8字串都可以表示為字串類型的資料。
如:{“one”:”Hello World”}
MongoDB結構(6/7)
0 ObjectId 類型

對象id是文檔中唯一的12位的ID
0|1|2|3|4|5|6|7|8|9|10|11
時間戳記 |機器 | PID | 計數器
如:ObjectId("4eae239f63520362e051e7fd")
0 日期

注意:使用的時候要加上new
如:{“one”:new Date()}
0 正則運算式

文檔鍵值可以包含規則運算式,其規則運算式採用JS語法
來表示。
如:{“one”:/ho/i}
MongoDB結構(7/7)
0 code

文檔中可以包含JS code
如:{“one”:function(){/*………….*/}}
0

Array
文檔中鍵值可以表示為陣列,在陣列內還可以嵌套陣列;
如:{“x”:[“a”,”b”,[“c”,”d”]]}
0 內嵌document

document可以包含別的document
如:{“x”:{“name”:”Tom”,”age”:20}}
基本操作(1/6)
> db.users.insert({"_id":1,"name":"mongo"})
> show dbs
admin (empty)
local (empty)
mydb 0.0625GB
> show collections
system.indexes
users
> db.users.find()
{ "_id" : 1, "name" : "mongo" }
基本操作(2/6)
0 儲存在MongoDB 集合中的每個document都有一個默

認的主鍵_id,它必須是唯一的,這個主鍵名稱是固
定的,它可以是MongoDB 支持的任何資料類型,默
認是ObjectId。
0 若沒有指定,則MongoDB會自動產生一個像GUID的
ID
基本操作(3/6)
> a={"name":"caida"} { "name" : "caida" }
> b={"age":24}
{ "age" : 24 }
> db.users.insert(a);
> db.users.save(b);
> db.users.find()
{ "_id" : 1, "name" : "mongo" }
{ "_id" : ObjectId("4eb2a192bf10550b2177b6f7"), "name" : "caida" }
{ "_id" : ObjectId("4eb2a199bf10550b2177b6f8"), "age" : 24 }
基本操作(4/6)
> db.users.remove({"name":"caida"})
> db.users.find()
{ "_id" : 1, "name" : "mongo" }
{ "_id" : ObjectId("4eb2a199bf10550b2177b6f8"), "age" : 24 }

0 db.collname.remove({條件})(不寫條件則刪除所有

記錄)
基本操作(5/6)
> db.users.update({"_id":1},{"name":"nosql"})
> db.users.find()
{ "_id" : 1, "name" : "nosql" }
{ "_id" : ObjectId("4eb2a199bf10550b2177b6f8"), "age" : 24 }

0 db.collname.update({條件},{內容})
基本操作(6/6)
> db.users.find()
{ "_id" : 1, "name" : "nosql" }
{ "_id" : ObjectId("4eb2a199bf10550b2177b6f8"), "age" : 24 }
> db.users.find({"name":"nosql"})
{ "_id" : 1, "name" : "nosql" }

0 db.collname.find({條件})(不寫條件查詢所有的資

料)
GridFS
GridFS是一種在MongoDB中儲存大二進位檔案

的機制,使用GridFS的原因有以下幾種:
 儲存巨大的檔,比如影片、高解析度圖片等。
 GridFS會直接利用已經建立的replica或sharding機制,故

障恢復和擴展都很容易。
 GridFS可以避免使用者上傳內容的檔案系統出現問題,像
是相同目錄中儲存過量數目檔案的問題
 GridFS不產生Disk碎片。
 GridFS 檔案分成檔案資訊和區塊(Chunks) 二個部分,檔
案資訊用來儲存檔案名稱和容量等資訊,而區塊則是將檔
案做分割後儲存,透過分割儲存的方式能夠達到快速讀取
檔案中的任一段資料的功能
What is NoSQL?Why NoSQL
MongoDB Introduction
MongoDB HA
MongoDB C# Driver
MongoDB Install & Setup
Replica Set(1/2)
Replica Set(2/2)
0 利用Replica Set即可完成簡單的failover與load

balance功能
0 最小instance數是兩台,但如果只有兩個instance,
當其中一個instance掛掉只剩一台時,MongoDB為了
避免新寫入的資料會丟失,所以會將整個服務變成唯
讀
0 只有Primary可以寫入資料,Secondary只能讀取資料,
當Primary被寫入資料時,會立即同步至Secondary,
若Primary Node掛掉時,則會由其他Node立即選出
新的Primary
Sharding(1/7)
0 將資料水平切分到不同的物理節點
0 利用更多的硬體資源來解決了單機性能極限的問題
0 數據量超過伺服器的硬碟容量時,就必需做 sharding
0 資水平切分後,會減小每個索引的體積。索引一般都

是 B樹 結構,索引體積減小後,索引深度也會隨之
減小,索引查詢的速度也會隨之提高
0 Mongo的sharding可以動態擴展、自動平衡、統一接
口
0 搭配replica set提高可用性及容錯
Sharding(2/7)
Sharding(3/7)
0 Mongos
0 對用戶端來說,直接訪問的是Mongos
0 它對外的介面就和普通的 mongod 一樣
0 可以使用標準 mongodb 用戶端和驅動進行訪問
0 主要作用是資料路由,定位資料位置,合併查詢結果
0 mongos 節點還負責資料移轉和資料自動平衡,並作為
sharding 集群的管理節點
0 不保存任何資料,可以任意水平擴展,這樣任意一個節
點發生故障都可以很容易的進行容錯移轉
Sharding(4/7)
0 Config
0 config 節點存儲了中繼資料,包括資料的位置,即哪些
資料位於哪些節點,以及集群配置信息
0 config 節點也是普通的 mongod
0 這 3 個 config 節點並非是一個 replica set。它們的資
料同步是由 mongos 執行兩階段提交來保證的
0 config 節點一定程度上實現了高可用。在一個或兩個節
點發生故障時,config 集群會變成唯讀。但此時,整個
sharding 集群仍然可以正常讀寫資料。只是無法進行
資料移轉和自動均衡而已
Sharding(5/7)
0 Shard
0 實際存放資料的資料節點。
0 每個 shard 節點可以是單個 mongod 實例,也可以是
一個 replica set
0 通常在使用 sharding 的時候,都會同時使用 replica
set 來實現高可用,避免單點故障的時候影響服務,及
數據丟失
0 對於每個開啟 sharding 的 db 來說,都會有一個 預設
shard 。初始時,第一個 chunk 就會在那裡建立。新資
料也就會先插入到那個 shard 節點中去。
Sharding(6/7)
Sharding(7/7)
What is NoSQL?Why NoSQL
MongoDB Introduction
MongoDB HA
MongoDB C# Driver
MongoDB Install & Setup
MongoDB C# / .NET Driver
0 http://docs.mongodb.org/ecosystem/drivers/csharp/
0 IDE
0 Visual Studio 2010
0 Visual Studio 2012
0 .NET Versions
0 .NET 3.5
0 .NET 4.0
0 .NET 4.5
0 支援LINQ操作
Get from NuGet
C# Driver (1/)
C# Driver (1/9)
C# Driver (2/9)
C# Driver (3/9)
C# Driver (4/9)
C# Driver (5/9)
C# Driver (6/9)
C# Driver (7/9)
C# Driver (8/9)
C# Driver (9/9)
What is NoSQL?Why NoSQL
MongoDB Introduction
MongoDB HA
MongoDB C# Driver
MongoDB Install & Setup
架構
0 三台instance做replica set
0 三台node的ip分別為

10.20.4.101, 10.20.4.102, 10.20.4.103。
0 Port : 27017
0 監控port : 28017
0 登入時需驗證
下載
0 http://www.mongodb.org/downloads
0 下載64-bit *2008R2+的版本
0 下載完後解壓縮即可
建立資料夾
0 解壓縮完的目錄下需要開一個放資料的目錄跟一個放

log的目錄。
data
logs
0 如果是replica set的話,則必須多開一個放key的目
錄,key是各node之間溝通時認證用的,所以每一台
放的key必須一樣
keykey.txt
安裝服務
0 在每一台的命令提示字元下,執行以下命令
cd C:mongodb-win32-x86_64-2008plus-2.4.5bin
mongod.exe -dbpath "C:mongodb-win32-x86_64-2008plus-2.4.5data" -logpath "C:mongodb-win32-x86_64-2008plus-2.4.5logsmongod.txt" -auth --install --replSet crm2 --keyFile "C:mongodb-win32-x86_642008plus-2.4.5keykey.txt" --rest
net start MongoDB

0 --dbpath是指定db目錄
0 --logpath指定log位置
0 --auth是指定之後連線必須經過認證過程
0 --install則是將服務安裝為windows service形式
0 -replSet crm2則是指定複本集的名稱為crm2
0 --keyFile指定key位置
0 --rest是指打開內建監控網站的rest api
初始化(1/4)
0 在初始化之前,必須確保每台node的port : 27017是

可以互通不被防火牆擋掉的
0 假設我們一開始以10.20.4.102做為Primary,我們就
在10.20.4.102的機器上,執行cmd.exe,並透過
mongo這個指令連進服務。
初始化(2/4)
0 連進服務後,執行rs.initiate()來初始化replica set服務。
0 接著執行rs.add(“10.20.4.101”)將101加入至replica set服務
0 執行rs.add(“10.20.4.103”)將103加入至replica set服務
0 加完之後可以使用rs.conf()來檢視設定
0 也可以使用rs.status()來檢視狀態
初始化(3/4)
初始化(4/4)
0 這樣replica set的初始化就算完成,但預設Secondary

也是無法讀取資料的,所以必須連進101跟103執行
rs.slaveOk() ,讓secondary也可以讀取資料,才能達
到load balance的效果。
帳號設定
0 在primary中執行以下命令
0 use admin
0 db.addUser(“{user}”,”{pwd}”)
0 在執行此行指定以前是不進行帳號密碼驗證的
監控網站(1/2)
監控網站(2/2)
MongoVUE(1/2)
0 GUI管理工具
0 http://www.mongovue.com/downloads/
MongoVUE(2/2)
Mongo db 簡介

More Related Content

PPTX
Mongo db 特性
PPTX
NoSQL-MongoDB介紹
PDF
NoSQL误用和常见陷阱分析
PPT
深入学习Mongo db
PPT
Redis 常见使用模式分析
PPTX
Redis介绍
PDF
数据库内核分享——第一期
PPSX
Mysql遇到的一些问题
Mongo db 特性
NoSQL-MongoDB介紹
NoSQL误用和常见陷阱分析
深入学习Mongo db
Redis 常见使用模式分析
Redis介绍
数据库内核分享——第一期
Mysql遇到的一些问题

What's hot (19)

PDF
redis 适用场景与实现
PDF
RockStor - A Cloud Object System based on Hadoop
PDF
How to Build Cloud Storage Service Systems
PDF
我对后端优化的一点想法
PDF
Buffer pool implementaion inno db vs oracle
PPTX
“云存储系统”赏析系列分享三:Sql与nosql
PDF
MySQL InnoDB 源码实现分析(一)
PDF
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
PDF
Spark sql培训
PPTX
Memcached vs redis
PPTX
Couchbase introduction - Chinese
PDF
Big Data, NoSQL, and MongoDB
PPTX
Linux内存管理
PDF
新浪微博Feed服务架构
PPTX
Ocean base 千亿级海量数据库-日照
PDF
Concurrency model for mysql data processing@rubyconf.tw 2012
PDF
百度系统部分布式系统介绍 马如悦 Sacc2010
PPSX
浅谈 My sql 性能调优
PDF
分布式Key Value Store漫谈
redis 适用场景与实现
RockStor - A Cloud Object System based on Hadoop
How to Build Cloud Storage Service Systems
我对后端优化的一点想法
Buffer pool implementaion inno db vs oracle
“云存储系统”赏析系列分享三:Sql与nosql
MySQL InnoDB 源码实现分析(一)
数据库内核分享第二期(Inno db 日志 回滚段 & 崩溃恢复实现详解)
Spark sql培训
Memcached vs redis
Couchbase introduction - Chinese
Big Data, NoSQL, and MongoDB
Linux内存管理
新浪微博Feed服务架构
Ocean base 千亿级海量数据库-日照
Concurrency model for mysql data processing@rubyconf.tw 2012
百度系统部分布式系统介绍 马如悦 Sacc2010
浅谈 My sql 性能调优
分布式Key Value Store漫谈
Ad

Similar to Mongo db 簡介 (20)

PPT
MongoDB Basics and Tutorial
PDF
Introduction to NoSQL
PDF
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
PPT
Nosql七种武器之长生剑 mongodb的使用介绍
PPT
完全用Nosql轻松打造千万级数据量的微博系统
PPT
Mongo db技术交流
PPTX
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
PDF
Taobao数据库这5年
PPTX
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
PDF
Jkcn MySQLDB 架构
PDF
分布式存储的元数据设计
PPT
MongoDB gridfs
PDF
110412 kningsoft-mongo db-intro-usage-in-mercury
PPT
内存数据库[1]
PDF
网站存储经验谈-pdf
PDF
网站存储经验谈pdf
PPTX
HDFS與MapReduce架構研討
PPTX
HDInsight for Microsoft Users
PPTX
MongoDB in SNS
PPT
Sequoia db 技术概述_sacc
MongoDB Basics and Tutorial
Introduction to NoSQL
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
Nosql七种武器之长生剑 mongodb的使用介绍
完全用Nosql轻松打造千万级数据量的微博系统
Mongo db技术交流
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
Taobao数据库这5年
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
Jkcn MySQLDB 架构
分布式存储的元数据设计
MongoDB gridfs
110412 kningsoft-mongo db-intro-usage-in-mercury
内存数据库[1]
网站存储经验谈-pdf
网站存储经验谈pdf
HDFS與MapReduce架構研討
HDInsight for Microsoft Users
MongoDB in SNS
Sequoia db 技术概述_sacc
Ad

More from 昱劭 劉 (6)

PPTX
設計模式的解析與活用讀後心得
PPTX
Automated Web Testing Using Selenium
PPTX
Python開發環境建立(使用ECLIPSE)
PPTX
持續整合與單元測試
PPTX
透過Nuget管理內部共用元件
PPTX
Restful & odata using asp.net web api
設計模式的解析與活用讀後心得
Automated Web Testing Using Selenium
Python開發環境建立(使用ECLIPSE)
持續整合與單元測試
透過Nuget管理內部共用元件
Restful & odata using asp.net web api

Mongo db 簡介