mogon簡(jiǎn)介
MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由 C++ 語(yǔ)言編寫(xiě)思喊。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案壁酬。
MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富恨课,最像關(guān)系數(shù)據(jù)庫(kù)的舆乔。
NoSQL簡(jiǎn)介
NoSQL:非關(guān)系型數(shù)據(jù)庫(kù)(不僅僅是SQL)。目前關(guān)系型數(shù)據(jù)庫(kù)占絕大多數(shù)剂公。
關(guān)系型數(shù)據(jù)庫(kù)遵循ACID規(guī)則
- A (Atomicity) 原子性原子性很容易理解希俩,也就是說(shuō)事務(wù)里的所有操作要么全部做完,要么都不做纲辽,事務(wù)成功的條件是事務(wù)里的所有操作都成功颜武,只要有一個(gè)操作失敗璃搜,整個(gè)事務(wù)就失敗,需要回滾鳞上。
- C (Consistency) 一致性一致性也比較容易理解这吻,也就是說(shuō)數(shù)據(jù)庫(kù)要一直處于一致的狀態(tài),事務(wù)的運(yùn)行不會(huì)改變數(shù)據(jù)庫(kù)原本的一致性約束篙议。
- I (Isolation) 獨(dú)立性所謂的獨(dú)立性是指并發(fā)的事務(wù)之間不會(huì)互相影響唾糯,如果一個(gè)事務(wù)要訪問(wèn)的數(shù)據(jù)正在被另外一個(gè)事務(wù)修改,只要另外一個(gè)事務(wù)未提交鬼贱,它所訪問(wèn)的數(shù)據(jù)就不受未提交事務(wù)的影響移怯。
- D (Durability) 持久性持久性是指一旦事務(wù)提交后,它所做的修改將會(huì)永久的保存在數(shù)據(jù)庫(kù)上这难,即使出現(xiàn)宕機(jī)也不會(huì)丟失舟误。
分布式計(jì)算的優(yōu)點(diǎn)
可靠性(容錯(cuò)) :分布式計(jì)算系統(tǒng)中的一個(gè)重要的優(yōu)點(diǎn)是可靠性。一臺(tái)服務(wù)器的系統(tǒng)崩潰并不影響到其余的服務(wù)器姻乓。
可擴(kuò)展性:在分布式計(jì)算系統(tǒng)可以根據(jù)需要增加更多的機(jī)器脐帝。
資源共享:共享數(shù)據(jù)是必不可少的應(yīng)用,如銀行糖权,預(yù)訂系統(tǒng)。
靈活性:由于該系統(tǒng)是非常靈活的炸站,它很容易安裝星澳,實(shí)施和調(diào)試新的服務(wù)。
更快的速度:分布式計(jì)算系統(tǒng)可以有多臺(tái)計(jì)算機(jī)的計(jì)算能力旱易,使得它比其他系統(tǒng)有更快的處理速度禁偎。
開(kāi)放系統(tǒng):由于它是開(kāi)放的系統(tǒng),本地或者遠(yuǎn)程都可以訪問(wèn)到該服務(wù)阀坏。
更高的性能:相較于集中式計(jì)算機(jī)網(wǎng)絡(luò)集群可以提供更高的性能(及更好的性?xún)r(jià)比)如暖。
分布式計(jì)算的缺點(diǎn)
故障排除: :故障排除和診斷問(wèn)題。
**軟件: **更少的軟件支持是分布式計(jì)算系統(tǒng)的主要缺點(diǎn)忌堂。
網(wǎng)絡(luò):網(wǎng)絡(luò)基礎(chǔ)設(shè)施的問(wèn)題盒至,包括:傳輸問(wèn)題,高負(fù)載士修,信息丟失等枷遂。
**安全性: **開(kāi)發(fā)系統(tǒng)的特性讓分布式計(jì)算系統(tǒng)存在著數(shù)據(jù)的安全性和共享的風(fēng)險(xiǎn)等問(wèn)題。
NoSQL 優(yōu)勢(shì)
NoSQL用于超大規(guī)模數(shù)據(jù)的存儲(chǔ)棋嘲。(例如谷歌或Facebook每天為他們的用戶收集萬(wàn)億比特的數(shù)據(jù))酒唉。這些類(lèi)型的數(shù)據(jù)存儲(chǔ)不需要固定的模式,無(wú)需多余操作就可以橫向擴(kuò)展沸移。
RDBMS vs NoSQL
**RDBMS **
- 高度組織化結(jié)構(gòu)化數(shù)據(jù)
- 結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)
- 數(shù)據(jù)和關(guān)系都存儲(chǔ)在單獨(dú)的表中痪伦。
- 數(shù)據(jù)操縱語(yǔ)言侄榴,數(shù)據(jù)定義語(yǔ)言
- 嚴(yán)格的一致性
- 基礎(chǔ)事務(wù)
**NoSQL **
- 代表著不僅僅是SQL
- 沒(méi)有聲明性查詢(xún)語(yǔ)言
- 沒(méi)有預(yù)定義的模式
- 鍵 - 值對(duì)存儲(chǔ),列存儲(chǔ)网沾,文檔存儲(chǔ)癞蚕,圖形數(shù)據(jù)庫(kù)
- 最終一致性,而非ACID屬性
- 非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
- CAP定理
- 高性能绅这,高可用性和可伸縮性
CAP定理(CAP theorem)
在計(jì)算機(jī)科學(xué)中, CAP定理(CAP theorem), 又被稱(chēng)作 布魯爾定理(Brewer's theorem), 它指出對(duì)于一個(gè)分布式計(jì)算系統(tǒng)來(lái)說(shuō)涣达,不可能同時(shí)滿足以下三點(diǎn):
- 一致性(Consistency) :所有節(jié)點(diǎn)在同一時(shí)間具有相同的數(shù)據(jù)
- 可用性(Availability) :保證每個(gè)請(qǐng)求不管成功或者失敗都有響應(yīng)
- 分隔容忍(Partition tolerance) :系統(tǒng)中任意信息的丟失或失敗不會(huì)影響系統(tǒng)的繼續(xù)運(yùn)作
CAP理論的核心是:一個(gè)分布式系統(tǒng)不可能同時(shí)很好的滿足一致性,可用性和分區(qū)容錯(cuò)性這三個(gè)需求证薇,最多只能同時(shí)較好的滿足兩個(gè)度苔。因此,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫(kù)分成了滿足 CA 原則浑度、滿足 CP 原則和滿足 AP 原則三 大類(lèi):
- CA(單點(diǎn)集群):滿足一致性寇窑,可用性的系統(tǒng),通常在可擴(kuò)展性上不太強(qiáng)大箩张。
- CP(滿足一致性):通常性能不是特別高甩骏。
- AP(滿足可用性):分區(qū)容忍性的系統(tǒng),通诚瓤叮可能對(duì)一致性要求低一些饮笛。
NoSQL的優(yōu)點(diǎn)/缺點(diǎn)
- 優(yōu)點(diǎn):
- 高可擴(kuò)展性
- 分布式計(jì)算
- 低成本
- 架構(gòu)的靈活性,半結(jié)構(gòu)化數(shù)據(jù)
- 沒(méi)有復(fù)雜的關(guān)系
- 缺點(diǎn):
- 沒(méi)有標(biāo)準(zhǔn)化
- 有限的查詢(xún)功能(到目前為止)
- 最終一致是不直觀的程序
BASE
CAP理論的核心是:一個(gè)分布式系統(tǒng)不可能同時(shí)很好的滿足一致性论熙,可用性和分區(qū)容錯(cuò)性這三個(gè)需求福青,最多只能同時(shí)較好的滿足兩個(gè)。BASE是NoSQL數(shù)據(jù)庫(kù)通常對(duì)可用性及一致性的弱要求原則:
- Basically Availble(基本可用)脓诡。
- Soft-state(軟狀態(tài)/柔性事務(wù)): "Soft state" 可以理解為"無(wú)連接"的, 而 "Hard state" 是"面向連接"的无午。
- Eventual Consistency(最終一致性): 也是 ACID 的最終目的。
ACID vs BASE
| ACID | BASE |
|:-------:|:-------:|
| 原子性(Atomicity) | 基本可用(Basically Available) |
| 一致性(Consistency) | 軟狀態(tài)/柔性事務(wù)(Soft state) |
| 隔離性(Isolation) | 最終一致性 (Eventual consistency) |
| 持久性 (Durable) | |
NoSQL 數(shù)據(jù)庫(kù)分類(lèi)
| 類(lèi)型 | 部分代表 | 簡(jiǎn)介 |
|:-------:|:-------:|:----------|
| 列存儲(chǔ) | Hbase | 顧名思義祝谚,是按列存儲(chǔ)數(shù)據(jù)的宪迟。最大的特點(diǎn)是方便存儲(chǔ)結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù),方便做數(shù)據(jù)壓縮交惯,對(duì)針對(duì)某一列或者某幾列的查詢(xún)有非常大的IO優(yōu)勢(shì)次泽。 |
| 文檔存儲(chǔ) | MongoDB | 文檔存儲(chǔ)一般用類(lèi)似json的格式存儲(chǔ),存儲(chǔ)的內(nèi)容是文檔型的商玫。這樣也就有有機(jī)會(huì)對(duì)某些字段建立索引箕憾,實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)的某些功能。 |
| key-value存儲(chǔ) | Memcache Redis | 可以通過(guò)key快速查詢(xún)到其value拳昌。一般來(lái)說(shuō)袭异,存儲(chǔ)不管value的格式,照單全收炬藤。(Redis包含了其他功能) |
| 圖存儲(chǔ) | FlockDB | 圖形關(guān)系的最佳存儲(chǔ)御铃。使用傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)來(lái)解決的話性能低下碴里,而且設(shè)計(jì)使用不方便。 |
| 對(duì)象存儲(chǔ) | Versant | 通過(guò)類(lèi)似面向?qū)ο笳Z(yǔ)言的語(yǔ)法操作數(shù)據(jù)庫(kù)上真,通過(guò)對(duì)象的方式存取數(shù)據(jù)咬腋。 |
| xml數(shù)據(jù)庫(kù) | BaseX | 高效的存儲(chǔ)XML數(shù)據(jù),并支持XML的內(nèi)部查詢(xún)語(yǔ)法睡互,比如XQuery,Xpath根竿。 |
MongoDB主要特點(diǎn)
- 可以在記錄中設(shè)置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來(lái)實(shí)現(xiàn)更快的排序。
- 可以通過(guò)本地或者網(wǎng)絡(luò)創(chuàng)建數(shù)據(jù)鏡像就珠,使得MongoDB有更強(qiáng)的擴(kuò)展性寇壳。
- 如果負(fù)載的增加(需要更多的存儲(chǔ)空間和更強(qiáng)的處理能力) ,可以分布在計(jì)算機(jī)網(wǎng)絡(luò)中的其他節(jié)點(diǎn)上妻怎,這就是所謂的分片壳炎。
- 支持豐富的查詢(xún)表達(dá)式。查詢(xún)指令使用JSON形式的標(biāo)記逼侦,可輕易查詢(xún)文檔中內(nèi)嵌的對(duì)象及數(shù)組匿辩。
- 使用update()命令可以實(shí)現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段 。
- 其中的Map/reduce主要是用來(lái)對(duì)數(shù)據(jù)進(jìn)行批量處理和聚合操作榛丢。
- Map和Reduce铲球。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數(shù)進(jìn)行處理晰赞。
- Map函數(shù)和Reduce函數(shù)是使用Javascript編寫(xiě)的睬辐,并可以通過(guò)db.runCommand或mapreduce命令來(lái)執(zhí)行MapReduce操作。
- GridFS是MongoDB中的一個(gè)內(nèi)置功能宾肺,可以用于存放大量小文件。
- 允許在服務(wù)端執(zhí)行腳本侵俗,可以用Javascript編寫(xiě)某個(gè)函數(shù)瀑焦,直接在服務(wù)端執(zhí)行逻悠,也可以把函數(shù)的定義存儲(chǔ)在服務(wù)端,下次直接調(diào)用即可。
Linux平臺(tái)安裝MongoDB
1. 下載完安裝包写穴,并解壓 tgz(以下演示的是 64 位 Linux上的安裝) 。
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz # 下載 tar -zxvf mongodb-linux-x86_64-3.0.6.tgz # 解壓 mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb # 將解壓包拷貝到指定目錄
2. MongoDB 的可執(zhí)行文件位于 bin 目錄下耘戚,所以可以將其添加到 PATH 路徑中:
export PATH= /usr/local/mongodb/bin:$PATH
3. 創(chuàng)建數(shù)據(jù)庫(kù)目錄
MongoDB的數(shù)據(jù)存儲(chǔ)在data目錄的db目錄下祷舀,但是這個(gè)目錄在安裝過(guò)程不會(huì)自動(dòng)創(chuàng)建,所以你需要手動(dòng)創(chuàng)建data目錄码泛,并在data目錄中創(chuàng)建db目錄猾封。
以下實(shí)例中我們將data目錄創(chuàng)建于根目錄下(/)。
注意:/data/db 是 MongoDB 默認(rèn)的啟動(dòng)的數(shù)據(jù)庫(kù)路徑(--dbpath)噪珊。
mkdir -p /data/db
4. 命令行中運(yùn)行 MongoDB 服務(wù)
你可以再命令行中執(zhí)行mongo安裝目錄中的bin目錄執(zhí)行mongod命令來(lái)啟動(dòng)mongdb服務(wù)晌缘。
注意:如果你的數(shù)據(jù)庫(kù)目錄不是/data/db齐莲,可以通過(guò) --dbpath 來(lái)指定。
$ ./mongod 2015-09-25T16:39:50.549+0800 I JOURNAL [initandlisten] journal dir=/data/db/journal 2015-09-25T16:39:50.550+0800 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed 2015-09-25T16:39:50.869+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.16 2015-09-25T16:39:51.206+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.52 2015-09-25T16:39:52.775+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 7.7
5. MongoDB后臺(tái)管理 Shell
如果你需要進(jìn)入MongoDB后臺(tái)管理磷箕,你需要先打開(kāi)mongodb裝目錄的下的bin目錄选酗,然后執(zhí)行mongo命令文件。
MongoDB Shell是MongoDB自帶的交互式Javascript shell,用來(lái)對(duì)MongoDB進(jìn)行操作和管理的交互式環(huán)境岳枷。
當(dāng)你進(jìn)入mongoDB后臺(tái)后芒填,它默認(rèn)會(huì)鏈接到 test 文檔(數(shù)據(jù)庫(kù)):
$ cd /usr/local/mongodb/bin $ ./mongo MongoDB shell version: 3.0.6 connecting to: test Welcome to the MongoDB shell.
由于它是一個(gè)JavaScript shell,您可以運(yùn)行一些簡(jiǎn)單的算術(shù)運(yùn)算:
> 2+2 4 3+6 9
現(xiàn)在讓我們插入一些簡(jiǎn)單的數(shù)據(jù)空繁,并對(duì)插入的數(shù)據(jù)進(jìn)行檢索:
> db.runoob.insert({x:10}) #在runoob表插入key為x殿衰,value為10的一條數(shù)據(jù) WriteResult({ "nInserted" : 1 }) #成功 db.runoob.find() #查詢(xún)r(jià)unoob表中的所有數(shù)據(jù) { "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 } #_id為系統(tǒng)為每條數(shù)據(jù)默認(rèn)分配的唯一標(biāo)識(shí)(可以自己指定)key為x的值為10
6. MongoDb web 用戶界面
MongoDB 提供了簡(jiǎn)單的 HTTP 用戶界面。 如果你想啟用該功能家厌,需要在啟動(dòng)的時(shí)候指定參數(shù) --rest 播玖。
$ ./mongod --dbpath=/data/db --rest
MongoDB 的 Web 界面訪問(wèn)端口比服務(wù)的端口多1000。
如果你的MongoDB運(yùn)行端口使用默認(rèn)的27017饭于,你可以在端口號(hào)為28017訪問(wèn)web用戶界面蜀踏,即地址為:http://localhost:28017。
MongoDB 概念解析
1. 在mongodb中基本的概念是文檔掰吕、集合果覆、數(shù)據(jù)庫(kù) **
2. 數(shù)據(jù)庫(kù)(database) **
一個(gè)mongodb中可以建立多個(gè)數(shù)據(jù)庫(kù)。
MongoDB的默認(rèn)數(shù)據(jù)庫(kù)為"db"殖熟,該數(shù)據(jù)庫(kù)存儲(chǔ)在data目錄中局待。
MongoDB的單個(gè)實(shí)例可以容納多個(gè)獨(dú)立的數(shù)據(jù)庫(kù),每一個(gè)都有自己的集合和權(quán)限菱属,不同的數(shù)據(jù)庫(kù)也放置在不同的文件中钳榨。
"show dbs" 命令可以顯示所有數(shù)據(jù)的列表。
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test show dbs local 0.078GB test 0.078GB
執(zhí)行 "db" 命令可以顯示當(dāng)前數(shù)據(jù)庫(kù)對(duì)象或集合纽门。
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test db test
運(yùn)行"use"命令薛耻,可以連接到一個(gè)指定的數(shù)據(jù)庫(kù)。
use local switched to db local db local
數(shù)據(jù)庫(kù)也通過(guò)名字來(lái)標(biāo)識(shí)赏陵。數(shù)據(jù)庫(kù)名可以是滿足以下條件的任意UTF-8字符串饼齿。
- 不能是空字符串("")。
- 不得含有' '(空格)蝙搔、.缕溉、$、/吃型、\和\0 (空宇符)证鸥。
- 應(yīng)全部小寫(xiě)。
- 最多64字節(jié)。
有一些數(shù)據(jù)庫(kù)名是保留的敌土,可以直接訪問(wèn)這些有特殊作用的數(shù)據(jù)庫(kù)镜硕。
- admin: 從權(quán)限的角度來(lái)看,這是"root"數(shù)據(jù)庫(kù)返干。要是將一個(gè)用戶添加到這個(gè)數(shù)據(jù)庫(kù)兴枯,這個(gè)用戶自動(dòng)繼承所有數(shù)據(jù)庫(kù)的權(quán)限。一些特定的服務(wù)器端命令也只能從這個(gè)數(shù)據(jù)庫(kù)運(yùn)行矩欠,比如列出所有的數(shù)據(jù)庫(kù)或者關(guān)閉服務(wù)器财剖。
- local: 這個(gè)數(shù)據(jù)永遠(yuǎn)不會(huì)被復(fù)制,可以用來(lái)存儲(chǔ)限于本地單臺(tái)服務(wù)器的任意集合癌淮。
- config: 當(dāng)Mongo用于分片設(shè)置時(shí)躺坟,config數(shù)據(jù)庫(kù)在內(nèi)部使用,用于保存分片的相關(guān)信息乳蓄。
**3. 文檔(document) **
文檔是一個(gè)鍵值(key-value)對(duì)(即BSON)咪橙。MongoDB 的文檔不需要設(shè)置相同的字段,并且相同的字段不需要相同的數(shù)據(jù)類(lèi)型虚倒,這與關(guān)系型數(shù)據(jù)庫(kù)有很大的區(qū)別美侦,也是 MongoDB 非常突出的特點(diǎn)。
一個(gè)簡(jiǎn)單的文檔例子如下:
{"site":"www.runoob.com", "name":"菜鳥(niǎo)教程"}
- 文檔中的鍵/值對(duì)是有序的魂奥。
- 文檔中的值不僅可以是在雙引號(hào)里面的字符串菠剩,還可以是其他幾種數(shù)據(jù)類(lèi)型(甚至可以是整個(gè)嵌入的文檔)。
- MongoDB區(qū)分類(lèi)型和大小寫(xiě)耻煤。
- MongoDB的文檔不能有重復(fù)的鍵具壮。
- 文檔的鍵是字符串。除了少數(shù)例外情況哈蝇,鍵可以使用任意UTF-8字符棺妓。
文檔鍵命名規(guī)范:
- 鍵不能含有\(zhòng)0 (空字符)。這個(gè)字符用來(lái)表示鍵的結(jié)尾炮赦。
- .和$有特別的意義涧郊,只有在特定環(huán)境下才能使用。
- 以下劃線"_"開(kāi)頭的鍵是保留的(不是嚴(yán)格要求的)眼五。
**4. 集合(collection) **
集合就是 MongoDB 文檔組,類(lèi)似于 RDBMS (關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng):Relational Database Management System)中的表格彤灶。
集合存在于數(shù)據(jù)庫(kù)中看幼,集合沒(méi)有固定的結(jié)構(gòu),這意味著你在對(duì)集合可以插入不同格式和類(lèi)型的數(shù)據(jù)幌陕,但通常情況下我們插入集合的數(shù)據(jù)都會(huì)有一定的關(guān)聯(lián)性诵姜。
比如,我們可以將以下不同數(shù)據(jù)結(jié)構(gòu)的文檔插入到集合中:
{"site":"www.baidu.com"} {"site":"www.google.com","name":"Google"} {"site":"www.runoob.com","name":"菜鳥(niǎo)教程","num":5}
當(dāng)?shù)谝粋€(gè)文檔插入時(shí)搏熄,集合就會(huì)被創(chuàng)建棚唆。
集合名命名規(guī)范:
- 集合名不能是空字符串""暇赤。
- 集合名不能含有\(zhòng)0字符(空字符),這個(gè)字符表示集合名的結(jié)尾宵凌。
- 集合名不能以"system."開(kāi)頭鞋囊,這是為系統(tǒng)集合保留的前綴。
- 用戶創(chuàng)建的集合名字不能含有保留字符瞎惫。有些驅(qū)動(dòng)程序的確支持在集合名里面包含溜腐,這是因?yàn)槟承┫到y(tǒng)生成的集合中包含該字符。除非你要訪問(wèn)這種系統(tǒng)創(chuàng)建的集合瓜喇,否則千萬(wàn)不要在名字里出現(xiàn)$挺益。
固定大小的集合(Capped collections)
它有很高的性能以及隊(duì)列過(guò)期的特性(過(guò)期按照插入的順序). 有點(diǎn)和 "RRD" 概念類(lèi)似。
Capped collections是高性能自動(dòng)的維護(hù)對(duì)象的插入順序乘寒。它非常適合類(lèi)似記錄日志的功能 和標(biāo)準(zhǔn)的collection不同望众,你必須要顯式的創(chuàng)建一個(gè)capped collection, 指定一個(gè)collection的大小伞辛,單位是字節(jié)烂翰。collection的數(shù)據(jù)存儲(chǔ)空間值提前分配的。
要注意的是指定的存儲(chǔ)大小包含了數(shù)據(jù)庫(kù)的頭信息始锚。
db.createCollection("mycoll", {capped:true, size:100000})
- 在capped collection中刽酱,你能添加新的對(duì)象。
- 能進(jìn)行更新瞧捌,然而棵里,對(duì)象不會(huì)增加存儲(chǔ)空間。如果增加姐呐,更新就會(huì)失敗 殿怜。
- 數(shù)據(jù)庫(kù)不允許進(jìn)行刪除。使用drop()方法刪除collection所有的行曙砂。
- 注意: 刪除之后头谜,你必須顯式的重新創(chuàng)建這個(gè)collection。
- 在32bit機(jī)器中鸠澈,capped collection最大存儲(chǔ)為1e9( 1X109)個(gè)字節(jié)柱告。
*5. 元數(shù)據(jù) **
數(shù)據(jù)庫(kù)的信息是存儲(chǔ)在集合中。它們使用了系統(tǒng)的命名空間:
dbname.system.*
在MongoDB數(shù)據(jù)庫(kù)中名字空間 <dbname>.system. 是包含多種系統(tǒng)信息的特殊集合(Collection)笑陈,如下:
對(duì)于修改系統(tǒng)集合中的對(duì)象有如下限制:
- 在{{system.indexes}}插入數(shù)據(jù)际度,可以創(chuàng)建索引。但除此之外該表信息是不可變的(特殊的drop index命令將自動(dòng)更新相關(guān)信息)涵妥。
- {{system.users}}是可修改的乖菱。
- {{system.profile}}是可刪除的。
**6. MongoDB 數(shù)據(jù)類(lèi)型 **
MongoDB連接
**1. 啟動(dòng) MongoDB服務(wù) **
啟動(dòng)只需要在MongoDB安裝目錄的bin目錄下執(zhí)行'mongod'即可。
執(zhí)行啟動(dòng)操作后窒所,mongodb在輸出一些必要信息后不會(huì)輸出任何信息鹉勒,之后就等待連接的建立,當(dāng)連接被建立后吵取,就會(huì)開(kāi)始打印日志信息禽额。
既可以使用 MongoDB shell 來(lái)連接,也可以使用php來(lái)連接海渊。
**2. 通過(guò)shell連接MongoDB服務(wù) **
localhost為主機(jī)名绵疲,這個(gè)選項(xiàng)是必須的:
mongodb://localhost $ ./mongo MongoDB shell version: 3.0.6 connecting to: test mongodb://localhostmongodb://localhost
3. MongoDB連接命令格式 **
使用用戶名和密碼連接到MongoDB服務(wù)器,你必須使用 'username:password@hostname/dbname**' 格式臣疑,'username'為用戶名盔憨,'password' 為密碼。
使用用戶名和密碼連接登陸到默認(rèn)數(shù)據(jù)庫(kù):
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test mongodb://admin:123456@localhost/
使用用戶名和密碼連接登陸到指定數(shù)據(jù)庫(kù):
mongodb://admin:123456@localhost/test
連接本地?cái)?shù)據(jù)庫(kù)服務(wù)器讯沈,端口是默認(rèn)的郁岩。
mongodb://localhost
使用用戶名fred,密碼foobar登錄localhost的admin數(shù)據(jù)庫(kù)缺狠。
mongodb://fred:foobar@localhost
使用用戶名fred问慎,密碼foobar登錄localhost的baz數(shù)據(jù)庫(kù)。
mongodb://fred:foobar@localhost/baz
連接 replica pair, 服務(wù)器1為example1.com服務(wù)器2為example2挤茄。
mongodb://example1.com:27017,example2.com:27017
連接 replica set 三臺(tái)服務(wù)器 (端口 27017, 27018, 和27019):
mongodb://localhost,localhost:27018,localhost:27019
連接 replica set 三臺(tái)服務(wù)器, 寫(xiě)入操作應(yīng)用在主服務(wù)器 并且分布查詢(xún)到從服務(wù)器如叼。
mongodb://host1,host2,host3/?slaveOk=true
直接連接第一個(gè)服務(wù)器,無(wú)論是replica set一部分或者主服務(wù)器或者從服務(wù)器穷劈。
mongodb://host1,host2,host3/?connect=direct;slaveOk=true
當(dāng)你的連接服務(wù)器有優(yōu)先級(jí)笼恰,還需要列出所有服務(wù)器,你可以使用上述連接方式:
安全模式連接到localhost歇终。
mongodb://localhost/?safe=true
以安全模式連接到replica set社证,并且等待至少兩個(gè)復(fù)制服務(wù)器成功寫(xiě)入,超時(shí)時(shí)間設(shè)置為2秒评凝。
mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000
**4. 參數(shù)選項(xiàng)說(shuō)明 **
標(biāo)準(zhǔn)格式:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]