摘要:總結(jié)說明非數(shù)據(jù)庫(kù)的用戶不能使用數(shù)據(jù)庫(kù)命令,比如等。數(shù)據(jù)庫(kù)中的用戶被視為超級(jí)用戶即管理員。
MongoDB
mongodb與 mysql性能比較 應(yīng)用范圍和限制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ù)的,語(yǔ)法有點(diǎn)類似javascript面向?qū)ο蟮牟樵冋Z(yǔ)言,它是一個(gè)面向集合的,模式自由的文檔型數(shù)據(jù)庫(kù)。
mongoDB的基本概念缺點(diǎn):不支持連表查詢,不支持sql語(yǔ)句,不支持事務(wù)存儲(chǔ)過程等,所以不適合存儲(chǔ)數(shù)據(jù)間關(guān)系比較復(fù)雜的數(shù)據(jù),一般主要是當(dāng)做一個(gè)數(shù)據(jù)倉(cāng)庫(kù)來(lái)使用。
適用于:日志系統(tǒng),股票數(shù)據(jù)等。 不使用于:電子商務(wù)系統(tǒng)等需要連多表查詢的功能。
文檔
文檔是mongoDB中數(shù)據(jù)的基本單元,類似關(guān)系數(shù)據(jù)庫(kù)的行, 多個(gè)鍵值對(duì)有序地放置在一起便是文檔。 MongoDB> 中以文檔的方式存取記錄,如一條記錄格式如下:
{ “username”:”Tom”, “age”:10,email:’[email protected]’,’sex’:男} { "username":"Tom" , "age" : "10" }
{“Username”:”Tom”,”age”:10} {“Username”:”Tom” }
注意:
(1)以上是幾個(gè)不同的文檔,MongoDB區(qū)分大小寫的數(shù)據(jù)類型,第一個(gè)age字段是數(shù)字類型,第二個(gè)age是字符串類型。
(2)每一個(gè)文檔尺寸不能超過16M
集合
數(shù)據(jù)結(jié)構(gòu)體系 windows怎么安裝mongodb呢?集合就是一組文檔,多個(gè)文檔組成一個(gè)集合,集合類似于 mysql里面的表 。 無(wú)模式是指,在同一個(gè)集合中可以包含不同格式的文檔,如: {
"Name" : "Mongodb" , "Type" : "Nosql" } { "UserName" : "Tom" ,
"age" : 20 , "Gender" : "male" } 以上兩個(gè)文檔可以放在同一個(gè)集合中。
在Mysql需要先建表再插入數(shù)據(jù), 模式自由(schema-free):意思是集合里面沒有行和列的概念,
注意:MongoDB中的集合不用創(chuàng)建、沒有結(jié)構(gòu),所以可以放不同格式的文檔。
使用管理員命令運(yùn)行
//安裝服務(wù) 配置dbpath,logpath cd d:wamp64inmongodb-win32-i386-2.0.3mongodb-win32-i386-2.0.3in mongod –install –logpath d:/mongo/log.txt --dbpath d:/mongo/data //啟動(dòng)服務(wù) net start mongodb //如果服務(wù)異常嘗試卸載重裝 可以查看服務(wù)所在路徑是否是指定的路徑 mongod.exe --remove --servicename mongodb數(shù)據(jù)庫(kù)的操作:
//顯示所以的數(shù)據(jù)庫(kù)
show dbs;
//指向db庫(kù)
use db;
查看集合
語(yǔ)法:show tables5、查詢集合里面的文檔
語(yǔ)法: db.集合名.find() 查詢所有 db.集合名.findone()
查詢第一個(gè)文檔 刪除集合 語(yǔ)法:db.集合名.drop();
刪除數(shù)據(jù)庫(kù)語(yǔ)法:db.dropdatabase()
//刪除php集合 db.php.drop;文檔的操作:
以下操作集合以php(集合)為例:
//插入文檔到php集合中 db.php.insert({name:’xiaoyi’}); //查看php集合的數(shù)據(jù) db.php.find(); //根據(jù)條件進(jìn)行查詢 db.php.find(),{age:18}; //取出單條數(shù)據(jù) db.php.findone(); //查詢集合的前8條數(shù)據(jù) db.php.limit(8); //偏移量的使用 skip db.php.find().skip(2).limit(1); //顯示文檔的個(gè)數(shù) db.php.count(); //刪除文檔 db.php.remove({}); //刪除指定條件的數(shù)據(jù) $lt(<),$gt(>) db.php.remove({age:{"$gt":25}}); //修改指定的文檔 db.php.update({"name":"xiaobao"},{"age":58});用戶管理
//用戶添加 //切換到指定的數(shù)據(jù)庫(kù) use stu; //為其增加用戶 db.adduser(’xiaoyi’,’admin’); 如何通過權(quán)限驗(yàn)證 (1)選擇數(shù)據(jù)庫(kù) Use stu; (2)執(zhí)行db.auth(用戶名,密碼) Db.auth(‘xiaoyi’,’admin’); //刪除用戶和修改密碼注意:創(chuàng)建的用戶名和密碼是存儲(chǔ)在各自數(shù)據(jù)庫(kù)里面的system.users集合里面的。 //獲取到用戶信息 Db.system.users.find(); //想要?jiǎng)h除用戶,則直接刪除system.users集合里面文檔即可。 Db.system.users.remove({name:’xiaoyi’});總結(jié)說明:
MongoDB的索引:(1)非admin數(shù)據(jù)庫(kù)的用戶不能使用數(shù)據(jù)庫(kù)命令,比如show dbs等。
(2)admin數(shù)據(jù)庫(kù)中的用戶被視為超級(jí)用戶(即管理員)。在認(rèn)證之后,管理員可以讀寫所有數(shù)據(jù)庫(kù),執(zhí)行特定的管理命令,
(3)在開啟安全檢查之前,一定要至少有個(gè)管理員賬號(hào)。
(4)數(shù)據(jù)庫(kù)的用戶賬號(hào)以文檔的形式存儲(chǔ)在system.users集合里面??梢栽趕ystem.users集合中刪掉用戶賬號(hào)文檔,就可以刪除用戶。
普通單列索引
測(cè)試代碼:
> for(var i=0;i<200000;i++){ ... db.java.insert({name:"xiao"+i,age:i}) ... }
第一:先檢驗(yàn)一下查詢性能
var start = new Date() db.java.find({name:"xiao156789"}) var end = new Date() end-start
第二:為name創(chuàng)建索引
db.java.ensureIndex({name:1})
第三:再執(zhí)行第一部分代碼可以看出有數(shù)量級(jí)的性能提升
沒有添加索引時(shí)使用時(shí)間是;
Var start=new date(); Db.php.find(); Var end=new Date(); End-start
添加索引
Db.php.ensureIndex({name:1});
添加完成后,再次查詢
語(yǔ)法: db.集合名.ensureIndex({鍵名:1}) 1是升續(xù) -1是降續(xù) 多列索引(復(fù)合索引) 創(chuàng)建多列索引
db.集合名.ensureIndex({field1:1/-1, field2:1/-1});
db.php.ensureIndex({name:1,age:1});
可以使用db.集合名.getIndexes()查看創(chuàng)建的索引情況。
子文檔索引
語(yǔ)法: db.集合名.ensureIndex({filed.subfield:1/-1}); 如下文檔可以建立子文檔索引
{name:’諾基亞手機(jī)1’,price:12.34,spc:{weight:100,area:’紐約’}}
{name:’諾基亞手機(jī)2’,price:42.34,spc:{weight:200,area:’倫敦’}}
比如要查詢weight等于100的文檔。 db.goods.find({‘spc.weight’:100})
根據(jù)當(dāng)前案例,我們建立子文檔索引
db.net.ensureIndex({"spc.w":1})
唯一索引:
//保證文檔數(shù)據(jù)的唯一性 Db.php.ensureIndex({name:-1},{unique:true});
//稀疏索引與普通索引兩者的區(qū)別
//稀疏索引的建立 Db.php.ensureIndex({email:1},{sparse:true});
查看索引
常用命令:
(1) 查看當(dāng)前索引狀態(tài): db.集合名.getIndexes();
Db.php.getIndexes();
(2)詳情查看本次查詢使用哪個(gè)索引和查詢數(shù)據(jù)的狀態(tài)信息。
db.php.find({name:’xiao’}).explain()刪除索引
刪除單個(gè)索引
語(yǔ)法:db.集合名.dropIndex({filed:1/-1});
db.php.dropIndex({name:1}); //刪除所有的索引 Drop.php.dropIndexes(); //獲取到集合索引 db.php.getIndexes();
重建索引
一個(gè)表經(jīng)過很多次修改后,導(dǎo)致表的文件產(chǎn)生空洞,索引文件也如此. 可以通過索引的重建,減少索引文件碎片,并提高索引的效率.
類似mysql中的optimize table mysql里面使用optimize table語(yǔ)法:optimize table 表名
db.集合名.reIndex()
Db.php.reIndex();
索引使用注意事項(xiàng)
(1)創(chuàng)建索引的時(shí)候,注意1是正序創(chuàng)建索引 -1是倒敘創(chuàng)建索引
(2)索引的創(chuàng)建在提高查詢性能的同時(shí)會(huì)影響插入性能,對(duì)于經(jīng)常查詢少插入的文檔可以考慮用索引
(3)復(fù)合索引要注意索引的先后順序。
(4)每個(gè)鍵全建立索引不一定就能提高性能,索引不是萬(wàn)能的。
(5)在做排序工作的時(shí)候如果是超大數(shù)據(jù)量也可以考慮加上索引用來(lái)提高排序的性能。
mongoDB的導(dǎo)入與導(dǎo)出
(1)導(dǎo)出數(shù)據(jù)
導(dǎo)入/導(dǎo)出可以操作的是本地的mongodb服務(wù)器,也可以是遠(yuǎn)程的,所以,都有如下通用選項(xiàng)。
利用mongoexport
-h host主機(jī)
--port 端口
-d 指明使用的庫(kù)
-c 指明要導(dǎo)出的集合
-o 指明要導(dǎo)出的文件名
--csv指定導(dǎo)出的csv格式
-q 過濾導(dǎo)出
-f field1 field2 列名
-u username 用戶名
-p password 密碼
如下操作,
mongoexport.exe -h localhost -d stu -c php -o f:/php.json
導(dǎo)入數(shù)據(jù)
使用mongoimport命令
-d 待導(dǎo)入的數(shù)據(jù)庫(kù)
-c 待導(dǎo)入的集合(不存在會(huì)自己創(chuàng)建)
--type csv/json(默認(rèn))
--file 備份文件路徑例1: 導(dǎo)入json ./bin/mongoimport -h --port 端口號(hào) -d test -c goods
--file ./goodsall.json 例2: 導(dǎo)入csv ./bin/mongoimport -h --port 端口號(hào) -d test -c goods --type csv -f goods_id,goods_name --file ./goodsall.csv ./bin/mongoimport -h --port 端口號(hào) -d test -c goods
--type csv --headline -f goods_id,goods_name --file ./goodsall.csv
案例:把剛才導(dǎo)出的php.json文件導(dǎo)入到user庫(kù)里面的php集合里面。
mongoimport.exe -d stu -c java --file f:/php.json
導(dǎo)入成功,進(jìn)行查看
主從復(fù)制主從復(fù)制是一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)同步備份的集群技術(shù)。主服務(wù)器負(fù)責(zé)數(shù)據(jù)的增刪改,從服務(wù)器同步主服務(wù)器實(shí)現(xiàn)數(shù)據(jù)的同步。
1原理圖:
2、實(shí)現(xiàn)的注意點(diǎn);
(1)在數(shù)據(jù)庫(kù)集群中要明確的知道誰(shuí)是主服務(wù)器,主服務(wù)器只有一臺(tái)。
(2)從服務(wù)器要知道自己的數(shù)據(jù)源也就是對(duì)于的主服務(wù)是誰(shuí)。
(3)--master用來(lái)確定主服務(wù)器,--slave和--source來(lái)控制從服務(wù)器。
3、配置步驟:
可以通過不同端口來(lái)模擬多臺(tái)mongodb服務(wù)器。
(1)啟動(dòng)主服務(wù)器
(2)啟動(dòng)從服務(wù)器
(3)客戶端登陸到主服務(wù)器
添加一些數(shù)據(jù),測(cè)試是否同步到從服務(wù)器
如下在主服務(wù)器里面,添加了一些文檔
第一步:客戶端登錄到主服務(wù)器,添加一些文檔
第二步:登陸到從服務(wù)器,查看是否有數(shù)據(jù)
如果有數(shù)據(jù),則成功了。
php操作mongodb插入文檔:
//(1)新建一個(gè)集合python,添加文檔, //注意:在php里面代碼操作時(shí),在黑窗口里面使用"."地方就變成使用‘->’,{}就變成關(guān)聯(lián)數(shù)組 //db.python.insert({name:"wawa",age:4}) $m=new Mongo("mongodb://root:root@localhost:8888/admin"); $db=$m->selectDb("stu");//選擇數(shù)據(jù)庫(kù) $db->python->insert(array("name"=>"wawa1","age"=>12)); $db->python->insert(array("name"=>"wawa2","age"=>22)); $db->python->insert(array("name"=>"wawa3","spc"=>array(‘w’=>100,’age’=>20))); $db->python->ensureIndex(array(‘name’=>1,array(‘’))) echo "ok"; //查詢文檔 $data = $db->net->find(); foreach($data as $v){ echo $v["name"]."---".$v["age"]."----".$v["email"]."
"; } //刪除文檔 db.net.remove({age:{"$gt":10}}) $res = $db->net->remove(array("age"=>array("$gt"=>10)));r435 //增刪改查 //注意,在命令行里面的 .變成-> {}變成數(shù)組 //(1)添加一個(gè)文檔 //$db->php->insert(["name"=>"程咬金","age"=>22]); //(2)查詢文檔 //$data = $db->php->find(); //查詢年齡等于9的文檔 //$data = $db->php->find(["age"=>9]); //查詢年齡大于9的文檔db.php.find({age:{"$gt":9}}); //$data = $db->php->find(["age"=>["$gt"=>9]]); //根據(jù)年齡降序顯示 //$data = $db->php->find()->sort(["age"=>-1]); //(3)修改文檔,我們直接使用修改器來(lái)完成, //把年齡等于8的名稱改名為"李白" //db.php.update({age:8},{"$set":{"name":"李白"}}) //$db->php->update(["age"=>8],["$set"=>["name"=>"李白"]]); //(4)刪除文檔 //比如刪除年齡等于10的文檔 //$db->php->remove(["age"=>10]); $data = $db->php->find(); foreach($data as $v){ echo $v["name"]."----".$v["age"]."
"; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/18958.html
摘要:前兩篇教程我們介紹了如何搭建的本地環(huán)境最簡(jiǎn)單的入門教程之一環(huán)境搭建以及如何用讀取里的記錄最簡(jiǎn)單的入門教程之二使用訪問這篇教程我們會(huì)介紹如何使用代碼來(lái)連接。代碼如下和教程二相比,上述代碼的方法里還展示了如何用代碼給數(shù)據(jù)庫(kù)里增加記錄。 前兩篇教程我們介紹了如何搭建MongoDB的本地環(huán)境: MongoDB最簡(jiǎn)單的入門教程之一 環(huán)境搭建 以及如何用nodejs讀取MongoDB里的記錄: M...
摘要:前兩篇教程我們介紹了如何搭建的本地環(huán)境最簡(jiǎn)單的入門教程之一環(huán)境搭建以及如何用讀取里的記錄最簡(jiǎn)單的入門教程之二使用訪問這篇教程我們會(huì)介紹如何使用代碼來(lái)連接。代碼如下和教程二相比,上述代碼的方法里還展示了如何用代碼給數(shù)據(jù)庫(kù)里增加記錄。 前兩篇教程我們介紹了如何搭建MongoDB的本地環(huán)境: MongoDB最簡(jiǎn)單的入門教程之一 環(huán)境搭建 以及如何用nodejs讀取MongoDB里的記錄: M...
摘要:前兩篇教程我們介紹了如何搭建的本地環(huán)境最簡(jiǎn)單的入門教程之一環(huán)境搭建以及如何用讀取里的記錄最簡(jiǎn)單的入門教程之二使用訪問這篇教程我們會(huì)介紹如何使用代碼來(lái)連接。代碼如下和教程二相比,上述代碼的方法里還展示了如何用代碼給數(shù)據(jù)庫(kù)里增加記錄。 前兩篇教程我們介紹了如何搭建MongoDB的本地環(huán)境: MongoDB最簡(jiǎn)單的入門教程之一 環(huán)境搭建 以及如何用nodejs讀取MongoDB里的記錄: M...
閱讀 838·2023-04-26 00:37
閱讀 724·2021-11-24 09:39
閱讀 2152·2021-11-23 09:51
閱讀 3827·2021-11-22 15:24
閱讀 750·2021-10-19 11:46
閱讀 1879·2019-08-30 13:53
閱讀 2433·2019-08-29 17:28
閱讀 1327·2019-08-29 14:11