mongodb:
由C++語言編寫绅这,分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。
Mongodb將數(shù)據(jù)存儲為一個文檔吐葵,數(shù)據(jù)結構由鍵值(key=>value)對組成,Mongodb文檔類似于Json對象桥氏,字段值可以包含其他文檔温峭,數(shù)組,以及文檔數(shù)組
{
name:"use",
age:26,
status:"A",
groups:["news","sports"]
}
MongoDB概念解析:
SQL術語/概念 MongoDB術語/概念 說明
database database 數(shù)據(jù)庫
table collection 數(shù)據(jù)庫表/集合
row document 數(shù)據(jù)記錄行/文檔
column field 數(shù)據(jù)字段/域
index index 索引
table joinx - 表連接字支,mongodb不支持
primary key primary key 主鍵凤藏,Mongodb主動將_id字段設置為主鍵
linux平臺安裝Mongodb:(Centos6 x64)
yum install -y mongodb-server mongodb
# rpm -ql mongodb-server
/etc/logrotate.d/mongodb #日志滾動配置文件
/etc/mongodb.conf #mongodb-server主要配置文件
/etc/rc.d/init.d/mongod #mongodb啟動腳本
/etc/sysconfig/mongod #mongodb啟動參數(shù)
/usr/bin/mongod #管理工具
/usr/bin/mongos
/usr/share/man/man1/mongod.1.gz
/usr/share/man/man1/mongos.1.gz
/var/lib/mongodb #mongodb默認數(shù)據(jù)庫存儲位置
/var/log/mongodb #日志目錄
/var/run/mongodb
# rpm -ql mongodb #mongodb客戶端
/usr/bin/bsondump
/usr/bin/mongo #登陸后臺shell工具
/usr/bin/mongodump
/usr/bin/mongoexport
/usr/bin/mongofiles
/usr/bin/mongoimport
/usr/bin/mongooplog
/usr/bin/mongoperf
/usr/bin/mongorestore
/usr/bin/mongosniff
/usr/bin/mongostat
/usr/bin/mongotop
/usr/share/man/man1/bsondump.1.gz
/usr/share/man/man1/mongo.1.gz
/usr/share/man/man1/mongodump.1.gz
/usr/share/man/man1/mongoexport.1.gz
/usr/share/man/man1/mongofiles.1.gz
/usr/share/man/man1/mongoimport.1.gz
/usr/share/man/man1/mongooplog.1.gz
/usr/share/man/man1/mongoperf.1.gz
/usr/share/man/man1/mongorestore.1.gz
/usr/share/man/man1/mongosniff.1.gz
/usr/share/man/man1/mongostat.1.gz
/usr/share/man/man1/mongotop.1.gz
# data/db 是 MongoDB 默認的啟動的數(shù)據(jù)庫路徑(--dbpath)
#或者
yum install -y mongodb-org-server-2.6.5-1.x86_64.rpm
yum install -y mongodb-org-mongos-2.6.5-1.x86_64.rpm
yum install - ymongodb-org-shell-2.6.5-1.x86_64.rpm
mongodb配置文件:
# vim /etc/mongod.conf
logpath=/data/mongodb/mongod.log
dbpath=/data/mongodb
pidfilepath=/data/mongodb/mongod.pid
#bind_ip=127.0.0.1
# 準備數(shù)據(jù)目錄
mkdir -pv /data/mongodb
chown -R mongod.mongod /data/mongodb
啟動mongodb:
/etc/init.d/mongod start
# 默認啟動后數(shù)據(jù)庫目錄在:/var/lib/mongodb(配置文件不定義dbpath)
mongod這樣方式啟動,會占據(jù)當前shell終端
# 啟動后數(shù)據(jù)庫目錄在/data/mongodb,此目錄需要提前創(chuàng)建好
# Mongodb默認數(shù)據(jù)庫為"db",單實例容納多個數(shù)據(jù)庫堕伪,每一個都有自己的集合揖庄,權限,不同的數(shù)據(jù)庫也放置在不同文件中欠雌。
# mongodb終端命令都可以使用tab鍵來補全接下來的命令
# show dbs 顯示列出所有數(shù)據(jù)庫
# db 顯示當前數(shù)據(jù)庫對象或集合
# use 可以連接到一個指定的數(shù)據(jù)庫
# service mongod start
mongodb數(shù)據(jù)庫名字要求:
1.不能是空字符串蹄梢,("")
2.不得含有' '(空格),.富俄、$禁炒、/、\和\0(空宇符)
3.應全部小寫
4.最多64字節(jié)
# 保留數(shù)據(jù)庫名字霍比,可以直接訪問這些有特殊作用的數(shù)據(jù)庫
admin:從權限的角度來看幕袱,這是"root"數(shù)據(jù)庫,要是將一個用戶添加到這個數(shù)據(jù)庫桂塞,這個用戶自動繼承所有數(shù)據(jù)庫的權限凹蜂,一些特定的服務器端命令也只能從這個數(shù)據(jù)庫運行,比如列出所有的數(shù)據(jù)庫或關閉服務器
local:這個數(shù)據(jù)永遠不會被復制阁危,可以用來存儲限于本地單臺服務器的任意集合
config:當mongodb用于分片設置時玛痊,config數(shù)據(jù)庫在內(nèi)部使用,用于保存分片的相關信息狂打。
mongodb中的文檔:
文檔是一組鍵值(key-value)對(BSON),Mongodb的文檔不需要設置相同的字段擂煞,并且相同的字段不需要相同的數(shù)據(jù)類型,這與關系型數(shù)據(jù)庫有很大的區(qū)別趴乡。
注意:
1对省、文檔中的鍵值對是有序的蝗拿。
2、文檔中的值不僅可以是在雙引號里面的字符串蒿涎,還可以是其他幾種數(shù)據(jù)類型(甚至可以是整個嵌入的文檔)
3哀托、Mongodb區(qū)分類型和大小寫
4、Mongodb的文檔不能有重復的鍵
5劳秋、文檔的鍵是字符串仓手,除了少數(shù)列外情況,鍵可以使用任意UTF-8字符
文檔中的鍵命名規(guī)范:
1玻淑、鍵不能含有\(zhòng)0,(空字符)嗽冒,這個字符用來表示鍵的結尾
2、.和$有特別意義补履,只在特定環(huán)境下才能使用添坊。
3、以下劃線"_"開頭的鍵箫锤,是保留的(不是嚴格要求)
@@
BSON:mongodb通信依賴于文檔贬蛙,需要一種所有驅(qū)動,工具和進程都能共享的文檔表達方式這種表達方式叫做Binary JSON(BSON)
BSON是輕量的二進制格式麻汰,能將MongoDB的所有文檔表示為字節(jié)字符串速客,數(shù)據(jù)庫能理解BSON,存在磁盤上的文檔也是這種格式五鲫。
mongodb中的集合:
集合就是Mongodb文檔組,類似于RDBMS中的表格
集合存在于數(shù)據(jù)庫中岔擂,集合沒有固定的結構位喂,這意味著你在對集合可以插入不同格式和類型的數(shù)據(jù),但通常情況下我們插入集合的數(shù)據(jù)都會有一定的關聯(lián)性乱灵。
# 合法的集合名
1塑崖、集合名不能是空字符串"",
2、集合名不能含有\(zhòng)0字符(空字符)痛倚,這個字符表示集合名的結尾
3规婆、集合名不能以"system."開頭,這是為系統(tǒng)集合保留的前綴
4蝉稳、用戶創(chuàng)建的集合名字不能含有保留字符抒蚜,(類似$)
capped collections:限制集合
1、固定大小的集合耘戚,
2嗡髓、高性能,隊列過期收津,
3饿这、顯示的創(chuàng)建浊伙,指定集合大小,
# db.createCollection("mycoll",{capped:true,size:100000})
4长捧、在capped collection中嚣鄙,你能添加新的對象,
5串结、能進行更新哑子,然而對象不會增加存儲空間,如果增加奉芦,更新就會失敗赵抢,(空間被占滿)
6、數(shù)據(jù)庫不允許進行刪除声功,使用drop()方法刪除collection所有的行烦却。
7、刪除之后先巴,必須顯示的重新創(chuàng)建這個collection
8其爵、在32bit機器中,capped collection最大存儲為1e9(10的九次方)個字節(jié)
元數(shù)據(jù):
數(shù)據(jù)庫的信息是存儲在集合中伸蚯,系統(tǒng)命名空間:dbname.system.*
dbname.system.namespaces 列出所有名字空間
dbname.system.indexes 列出所有索引
dbname.system.profile 包含數(shù)據(jù)庫概要信息
dbname.system.users 列出所有可訪問數(shù)據(jù)庫的用戶
dbname.local.sources 包含復制對端(slave)的服務器信息和狀態(tài)
限制:
在{{system.indexes}}插入數(shù)據(jù)摩渺,可以創(chuàng)建索引,但除此之外該表信息是不可變的(特殊的drop index命令將自動更新相關信息)
{{system.users}}是可修改的剂邮。
{{system.profile}}是可刪除的摇幻。
Mongodb數(shù)據(jù)類型:
String 字符串,utf-8編碼的字符串才是合法的挥萌。
Integer 整型數(shù)值
Boolean 布爾值
Double 雙精度浮點值
Min/Max Keys 將一個值與BSON元素的最低值和最高值相對比
Arrays 用于將數(shù)組或列表或多個值存儲為一個鍵
Timestamp 時間戳绰姻,記錄文檔修改或添加的具體時間
Object 用于內(nèi)嵌文檔
Null 用于創(chuàng)建空值
Symbol 符號
Date 日期時間
Object ID 對象ID,用于創(chuàng)建文檔的ID
Binary Data 二進制數(shù)據(jù)
Code 代碼類型
Regular Expression 正則表達式類型
Mongodb - 連接:
URL連接語法:
mongodb://[username:passwprd@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
# mongodb:// 固定格式
# username:password@ 可選項,驅(qū)動會嘗試登陸此數(shù)據(jù)庫
# host1 必須的指定至少一個host,host1是唯一要填寫的引瀑,如果要連接復制集合狂芋,需要指定多個IP
# portX 可選的指定端口,如果不填憨栽,默認27017
# /database 如果指定username:password@,連接并驗證登陸指定數(shù)據(jù)庫帜矾,如不指定默認打開admin數(shù)據(jù)庫。
# ?options 是連接選項屑柔,如果不使用/database,則前面需要加上/屡萤,所有連接選項都是鍵值對,name=value,鍵值對之間通過&或;(分號)隔開
# 連接選項:
replicaSet=name 驗證replica set的名稱锯蛀,
slaveOK=true|false
# true:在connect=direct模式下灭衷,驅(qū)動會連接第一臺機器,即使這臺服務器不是主旁涤,
在connect=replicaSet模式下翔曲,驅(qū)動會發(fā)送所有的寫請求到主迫像,并且把讀取操作分布在其他從服務器
# false:在connect=direct模式下,驅(qū)動會自動找尋主服務器瞳遍,
在connect=replicaSet模式下闻妓,驅(qū)動僅僅連接主服務器,并且所有的讀寫命令都連接到主服務器
safe=true|false
# true:在執(zhí)行更新操作之后掠械,驅(qū)動都會發(fā)送getLastError命令來確保更新成功
# false:在每次更新之后由缆,驅(qū)動不會發(fā)送getLastError來確保更新成功
w=n 驅(qū)動添加{w:n}到getLastError命令,應用于safe=true.
wtimeoutMS=ms 驅(qū)動添加{wtimeout:ms}到getlasterror命令猾蒂,應用與safe=true
fsync=true|false
# true:驅(qū)動添加{fsync:true}到getlasterror命令均唉,應用于safe=true
#false:驅(qū)動不會添加到getlastError命令中
journal=true|false
#如果設置為true,同步到journal(在提交到數(shù)據(jù)庫前寫入到實體中),應用于safe=true
connectTimeoutMS=ms 可以打開連接的時間
socketTimeoutMS=ms 發(fā)送和接受sockets時間
實例:
#使用默認端口來連接MongoDB的服務:
mongodb:localhost
#通過shell連接Mongodb服務:
mongo
#admin用戶,123456密碼,連接到本地的Mongodb服務上
mongodb://admin:123456@localhost/
#使用用戶名和密碼連接登陸到指定數(shù)據(jù)庫test
mongodb://admin:123456@localhost/test
#連接replica pair,服務器1為example1.com,服務器2為example2.
mongodb://example1.com:27017,example2.com:27017
#連接replica set 三臺服務器(端口為27017肚菠,27018舔箭,27019)
mongodb://localhost,localhost:27018,localhost:27019
#連接replica set 三臺服務器,寫入操作應用在主服務器蚊逢,并且分布查詢到從服務器
mongodb://host1,host2,host3/?salve=Ok=true
#直接連接第一個服務器层扶,無論是replica set一部分或者主服務器或者從服務器
mongodb://host1,host2,host3/?connect=direct;salveOk=true
#安全模式連接到localhost:
mongodb://localhost/?safe=true
#安全模式連接到replica set并且等待至少兩個復制服務器成功寫入,超時時間設置為2秒
mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000