概述
MongoDB是什么?
MongoDB的作用泽示,使用場景缸血?
MongoDB的使用方式?
<br />
MongoDB是什么械筛,有什么特點捎泻。
MongoDB是一種NoSql數(shù)據(jù)庫,是一個使用C++開發(fā)的高性能埋哟,開源笆豁,無模式的文檔型數(shù)據(jù)庫。MongoDB是面向文檔的赤赊,文檔以JSON格式闯狱,二進制JSON (BSON) 存儲在MongoDB中。官方網(wǎng)站地址是:http://www.mongodb.org/ 抛计。
主要特點有:面向集合存儲哄孤,易存儲對象類型的數(shù)據(jù),模式自由并且支持動態(tài)查詢吹截。支持完全索引瘦陈,查詢,支持服務器之間的數(shù)據(jù)復制和故障恢復波俄。使用高效的二進制數(shù)據(jù)存儲晨逝,包括大型對象(如視頻等)。自動處理碎片懦铺,以支持云計算層次的擴展性捉貌,可動態(tài)添加額外的機器。支持Python,PHP昏翰,Ruby苍匆,Java,C棚菊,C#,Javascript叔汁,Perl及C++等
MongoDB的作用统求,使用場景?
適用場景
- 網(wǎng)站實時數(shù)據(jù)處理据块,它非常適合實時的插入码邻、更新與查詢,并具備網(wǎng)站實時數(shù)據(jù)存儲所需的復制及高度伸縮性另假。
- 大尺寸像屋,低價值的數(shù)據(jù),使用傳統(tǒng)的關系型數(shù)據(jù)庫存儲一些數(shù)據(jù)時可能會比較昂貴边篮,可以用MongoDB代替己莺。
- 高伸縮性的場景,非常適合由數(shù)十或數(shù)百臺服務器組成的數(shù)據(jù)庫戈轿。
不適用場景
- 要求高度事務性的系統(tǒng)凌受,不可靠環(huán)境保證高可用性。
- 復雜的跨文檔(表)級聯(lián)查詢思杯。
MongoDB使用方式
MongoDB安裝(CentOS6.5)
根據(jù)系統(tǒng)類型和位數(shù)選擇合適的安裝包胜蛉。Linux 32-bit legacy 這個版本不推薦在正式環(huán)境使用,這個版本特點是沒有連接ssl相關的庫色乾,并且可能缺少針對操作系統(tǒng)的一些性能優(yōu)化誊册,但是可以測試用,安裝簡單暖璧。推薦按相應操作系統(tǒng)版本選擇對應的安裝包如centos6 rhel6選擇RHEL 6 Linux 64-bit案怯。
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.7.tgz -P /tmp/
創(chuàng)建數(shù)據(jù)庫文件夾,日志文件夾和編寫編輯文件
mv /tmp/mongodb-3.2.7 /usr/local/mongodb
cd /usr/local/mongodb
mkdir db
mkdir logs
cd bin
編寫配置文件
vim /usr/local/mongodb/mongodb.conf
dbpath = /usr/local/mongodb/db #數(shù)據(jù)庫地址
logpath= /usr/local/mongodb/logs/mongodb.log #日志
port = 27017 #端口
journal=no #不持久化漆撞,災備
storageEngine=mmapv1 #3.0以上默認使用wiredTiger,系統(tǒng)不支持可以切換回mmapv1(待深究)
fork=yes #后臺運行殴泰,守護進程
pidfilepath = /var/run/mongodb/mongod.pid
auth = true #開啟驗證
開啟MongoDB服務
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf #開啟服務
echo "/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf" > /etc/rc.local #設置開機啟動
添加超級管理員
/usr/local/mongodb/bin/mongo #連接mongodb
#切換admin數(shù)據(jù)庫,如果不存在自動創(chuàng)建
use admin
#3.0以下用addUser浮驳。role權限悍汛,db指數(shù)據(jù)庫。root超級管理員至会,還有其他的權限如_system內(nèi)部角色离咐,UserAdmin,dbAdmin等
db.createUser({
user:"admin",
pwd:"123456",
roles:[{role:"root",db:"admin"}] #
})
#驗證用戶,登錄
db.auth("admin","123456")
修改防火墻配置
#首先,所有訪問27017 端口的請求都會被拒絕
iptables -I INPUT -p tcp --dport 27017 -j DROP
#當然宵蛀,自己不能被擋在外面昆著,給自己開個后門
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 27017 -j ACCEPT(出于業(yè)務邏輯的需要,有時還需要對服務器的公網(wǎng)IP授權)
#保存修改
/etc/rc.d/init.d/iptables save
#重啟防火墻
service iptables restart
MongoDB的數(shù)據(jù)庫常用操作命令
# 幫助文檔术陶,yourColl指的是集合
help
db.help()
db.yourColl.help()
db.youColl.find().help()
rs.help();
#顯示所有數(shù)據(jù)庫
show dbs
#當前數(shù)據(jù)庫
db
#顯示所有用戶
show users;
用戶命令
# 切換數(shù)據(jù)庫凑懂,用戶登錄前必須切換到對應的數(shù)據(jù)庫。超級管理員權限也無法在非用戶對應的數(shù)據(jù)庫登錄梧宫。
use admin
# 用戶登錄
db.auth("username","pwd");
# 顯示當前驗證用戶的權限接谨。
show roles
切換數(shù)據(jù)庫,添加數(shù)據(jù)
use test
# 顯示test數(shù)據(jù)庫里面的所有集合塘匣,數(shù)據(jù)表
show collections
# 插入數(shù)據(jù)
db.user.insert({
username:"lance",
age:"18",
grande:"男",
job:['coder','PHPer']
})
db.user.insert({
username:"maven",
age:"28",
grande:"男",
job:['designer','coder']
})
查詢數(shù)據(jù)
# 默認顯示20條脓豪,DBQuery.shellBatchSize=NUM控制顯示調(diào)試,it翻頁
db.user.find();
# 格式化輸出
db.user.find().pretty()
# 條件查詢相當于where username="lance"
db.user.find({username:"lance"})
# select age,job where username="maven",1表示顯示忌卤,0表示不顯示扫夜,用true或者false也可以。
db.user.find({username:"maven"},{age:1,job:1})
# 相當于where age >=20, $gt大于驰徊,$lt小于笤闯,$ne不等于。
# 按理應取到maven的數(shù)據(jù)辣垒,但maven的age字段是字符串類型望侈,搜索條件的age是int類型,得不到數(shù)據(jù)。應該用db.user.find({age:{$gte:"20"}})
db.user.find({age:{$gte:20}})
# 相當于where username like "la%",正則表達式^$
db.user.find({username: /^la/});
# sort 排序勋桶,1為升序脱衙,-1為降序
db.user.find().sort({age: 1});
# 獲取前5條數(shù)據(jù)
db.user.find().limit(5);
# 跳過前5條,獲取10條數(shù)據(jù)例驹,用于分頁
db.user.find().limit(10).skip(5);
# where age = '18' or age= '28'捐韩,或查詢
db.user.find({$or: [{age: 18}, {age: 28}]});
更新數(shù)據(jù)
db.user.update({'username':'maven'},{$set:{'age':'20'}}) #更新一條數(shù)據(jù)
db.user.update({'username':'maven'},{$set:{'age':'20'}},{multi:true})#更新所以符合條件的數(shù)據(jù)
db.user.update({'username':'maven'},{$set:{'age':'20'}},{upsert:true})#如果需要更新的數(shù)據(jù)不存在則插入一條數(shù)據(jù)。
刪除數(shù)據(jù)
db.user.remove({'username':'lance'}) #刪除符合條件的所以數(shù)據(jù)
db.user.remove({'username':'lance'},{justOne:1})#只刪除一條數(shù)據(jù)
MongoDB的PHP擴展和使用方法
GitHut源地址:https://github.com/mongodb/mongo-php-driver
可以用prec方式安裝鹃锈,或者編譯安裝擴展生成mongo.so荤胁。
修改php.ini文件,在php.ini文件中添加mongo配置屎债,配置如下:
extension=mongo.so
php連接mongodb
// 連接默認主機和端口為:mongodb://localhost:27017
$m = new MongoClient();
// 獲取名稱為 "test" 的數(shù)據(jù)庫仅政,不存在自動創(chuàng)建
$db = $m->test;
創(chuàng)建集合collection
$collection = $db->createCollection("runoob");
插入數(shù)據(jù)
// 選擇集合
$collection = $db->runoob;
$document = array( "title" => "MongoDB", "description" => "database");
$collection->insert($document);
查詢數(shù)據(jù)
//count()獲取條數(shù),findOne()獲取單條數(shù)據(jù)盆驹。sort排序圆丹。其中 1 為升序排列,而-1是用于降序排列,參數(shù)的先后影響排序順
$collection->find()->sort(array('code'=>1,'money'=>-1));
$collection->find()->fields(array("title"=>false)); //不顯示title
$collection->find()->fields(array("title"=>true)); //只顯示title列
$collection->find()->limit(1)->skip(1);//跳過 1 條記錄躯喇,取出 1條
$collection->find(array("money" => array('$in'=>array(20,30,90)))); //in查詢
模糊查詢
$param = array("title" => new MongoRegex('/db/')); //like '%str%' 糊查詢集合中的數(shù)據(jù) ,正則^$
$result = $collection->find($param);
更新數(shù)據(jù)
// 更新文檔
$collection->update(array("title"=>"MongoDB"),array('$set'=>array("title"=>"MongoDB 教程")));
刪除數(shù)據(jù)
$collection->remove(array("title"=>"MongoDB 教程"), array("justOne" => true))
MongoDB的常用工具
可視化工具:MongoChef