成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

mongoDb的簡(jiǎn)單使用

Java_oldboy / 813人閱讀

摘要:總結(jié)說明非數(shù)據(jù)庫(kù)的用戶不能使用數(shù)據(jù)庫(kù)命令,比如等。數(shù)據(jù)庫(kù)中的用戶被視為超級(jí)用戶即管理員。

MongoDB

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與 mysql性能比較

應(yīng)用范圍和限制

缺點(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的基本概念

文檔

文檔是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

集合

集合就是一組文檔,多個(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),所以可以放不同格式的文檔。

數(shù)據(jù)結(jié)構(gòu)體系

windows怎么安裝mongodb呢?

使用管理員命令運(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é)說明:

(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)文檔,就可以刪除用戶。

MongoDB的索引:

普通單列索引
測(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

相關(guān)文章

  • MongoDB簡(jiǎn)單入門教程之三 使用Java代碼往MongoDB里插入數(shù)據(jù)

    摘要:前兩篇教程我們介紹了如何搭建的本地環(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...

    Kylin_Mountain 評(píng)論0 收藏0
  • MongoDB簡(jiǎn)單入門教程之三 使用Java代碼往MongoDB里插入數(shù)據(jù)

    摘要:前兩篇教程我們介紹了如何搭建的本地環(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...

    Hegel_Gu 評(píng)論0 收藏0
  • MongoDB簡(jiǎn)單入門教程之三 使用Java代碼往MongoDB里插入數(shù)據(jù)

    摘要:前兩篇教程我們介紹了如何搭建的本地環(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...

    whatsns 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<