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