html
MongoDB是一款強大、靈活、且易於擴展的通用型數據庫,MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。mysql
在高負載的狀況下,添加更多的節點,能夠保證服務器性能。sql
MongoDB 旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。mongodb
MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔,數組及文檔數組。shell
MongoDB是由C++編寫的,是一個基於分佈式文件存儲的開源數據庫系統,它不是關係型數據庫。在高負載的狀況下,添加更多的節點,能夠保證服務器的性能。數據庫
MongoDB是一個面向文檔(document-oriented)的數據庫,而不是關係型數據庫。數組
不採用關係型主要是爲了得到更好得擴展性。固然還有一些其餘好處,與關係數據庫相比,面向文檔的數據庫再也不有「行「(row) 的概念取而代之的是更爲靈活的「文檔」(document)模型。緩存
經過在文檔中嵌入文檔和數組,面向文檔的方法可以僅使用一條記錄 來表現複雜的層級關係,這與現代的面嚮對象語言的開發者對數據的見解一致。服務器
另外,再也不有預約義模式(predefined schema):文檔的鍵(key)和值(value)再也不是固定的類型和大小。因爲沒有固定的模式,根據須要添加或刪除字段變得更容易了。session
一般因爲開發者可以進行快速迭代,因此開發進程得以加快。並且,實驗更容易進行。開發者能嘗試大量的數據模型,從中選一個最好的。
應用程序數據集的大小正在以難以想象的速度增加。隨着可用帶寬的增加和存儲器價格的降低,即便是一個小規模的應用程序,須要存儲的數據量也可能大的驚人,甚至超出了不少數據庫的處理能力。過去很是罕見的T級數據,如今已是司空見慣了。
因爲須要存儲的數據量不斷增加,開發者面臨一個問題:應該如何擴展數據庫,分爲縱向擴展和橫向擴展,縱向擴展是最省力的作法,但缺點是大型機通常都很是貴,並且當數據量達到機器的物理極限時,花再多的錢也買不到更強的機器了,此時選擇橫向擴展更爲合適,但橫向擴展帶來的另一個問題就是須要管理的機器太多。
MongoDB的設計採用橫向擴展。面向文檔的數據模型使它能很容易地在多臺服務器之間進行數據分割。MongoDB可以自動處理跨集羣的數據和負載,自動從新分配文檔,以及將用戶的請求路由到正確的機器上。這樣,開發者可以集中精力編寫應用程序,而不須要考慮如何擴展的問題。
若是一個集羣須要更大的容量,只須要向集羣添加新服務器,MongoDB就會自動將現有的數據向新服務器傳送。
MongoDB做爲一款通用型數據庫,除了可以建立、讀取、更新和刪除數據以外,還提供了一系列不斷擴展的獨特功能。
索引
支持通用二級索引,容許多種快速查詢,且提供惟一索引、複合索引、地理空間索引、全文索引
聚合
支持聚合管道,用戶能經過簡單的片斷建立複雜的集合,並經過數據庫自動優化
特殊的集合類型
支持存在時間有限的集合,適用於那些將在某個時刻過時的數據,如會話session。相似地,MongoDB也支持固定大小的集合 ,用於保存近期數據,如日誌
文件存儲
支持一種很是易用的協議,用於存儲大文件和文件元數據。MongoDB並不具有一些在關係型數據庫中很廣泛的功能, 如連接join和複雜的多行事務。省略這些的功能是處於架構上的考慮,或者說爲了獲得更好的擴展性,由於在分佈式系統中這兩個功能難以高效地實現
MongoDB的一個主要目標是提供卓越的性能,這很大程度上決定了MongoDB的設計。MongoDB把儘量多的內存用做緩存cache, 視圖爲每次查詢自動選擇正確的索引。
總之各方面的設計都旨在保持它的高性能,雖然MongoDB很是強大並試圖保留關係型數據庫的不少特性,但它並不追求具有關係型數據庫的全部功能。
只要有可能,數據庫服務器就會將處理邏輯交給客戶端。這種精簡方式的設計是MongoDB可以實現如此高性能的緣由之一。
1.下載安裝包
MongoDB 提供了可用於 32 位和 64 位系統的預編譯二進制包,你能夠從MongoDB官網下載安裝,MongoDB 預編譯二進制包下載地址:https://www.mongodb.com/download-center#community
2.安裝
指定安裝路徑,我這裏安裝在D:\ProgramFiles\MongoDB,添加D:\ProgramFiles\MongoDB\bin到環境變量中。
3.新建目錄與文件夾
D:\ProgramFiles\MongoDB\data\db
D:\ProgramFiles\MongoDB\log\mongod.log
4.新建配置文件mongo.cfg,參考https://docs.mongodb.com/manual/reference/configuration-options/
systemLog: destination: file path: "D:\ProgramFiles\MongoDB\log\mongod.log" logAppend: true storage: journal: enabled: true dbPath: "D:\ProgramFiles\MongoDB\data\db" net: bindIp: 0.0.0.0 port: 27017 setParameter: enableLocalhostAuthBypass: false
5.製做系統服務
mongod --config "D:\ProgramFiles\MongoDB\mongod.cfg" --bind_ip 0.0.0.0 --install
或者直接在命令行指定配置
mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\ProgramFiles\MongoDB\log\mongod.log --logappend --dbpath D:\ProgramFiles\MongoDB\data\db --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install
6.啓動MongoDB服務
net start MongoDB
net stop MongoDB
7.登陸MongoDB
mongo 連接:http://www.runoob.com/mongodb/mongodb-window-install.html 當沒有帳號密碼登陸的時候,默認就是管理員登陸。,由於剛剛作系統服務install的時候沒有指定 --auth(沒有指定則沒有權限認證這一說),(至關於mysql跳過受權表啓動同樣)
帳號管理:https://docs.mongodb.com/master/tutorial/enable-authentication/
1.建立有權限的用戶
use admin db.createUser( { user: "root", # 這個root能夠隨便寫 pwd: "123", roles: [{role: "root", db: "admin"}] # 權限,role是root說明是管理員, } ) use test db.createUser( { user: "egon", pwd: "123", roles: [ {role: "readWrite", db: "test"}, # 針對test庫有讀寫權限,操做本身的庫有讀寫權限 {role: "read", db: "db1"} ] # 針對db1庫讀權限,操做其餘庫有讀權限 } )
2.重啓數據庫
mongod --remove mongod --config "C:\mongodb\mongod.cfg" --bind_ip 0.0.0.0 --install --auth # 或者 mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\MongoDB\log\mongod.log --logappend --dbpath D:\MongoDB\data\db --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install --auth
3.登陸,注意使用雙引號而非單引號
# 方式一 mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin" # 方式二:在登陸以後用db.auth("帳號","密碼")登陸 mongo use admin db.auth("root","123")
推薦博客http://www.javashuo.com/article/p-kbhmsjgf-he.html
建立帳號密碼+開啓認證機制
1.mongo 127.0.0.1:27017/config # 鏈接到任何數據庫config 2.mongo --nodb # 不鏈接到任何數據庫 3.啓動以後,在須要時運行new Mongo(hostname)命令就能夠鏈接到想要的mongod了 > conn=new Mongo('127.0.0.1:27017') connection to 127.0.0.1:27017 > db=conn.getDB('admin') admin 4.help查看幫助 5.mongo是一個簡化的JavaScript shell,是能夠執行JavaScript腳本的