1、MongoDB簡介javascript
一、MongoDB是什麼php
MongoDB 是一個基於分佈式文件存儲的數據庫。由 C++ 語言編寫。旨在爲 WEB 應用提供可擴展的高性能數據存儲解決方案。MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。他支持的數據結構很是鬆散,是相似json的bson格式,所以能夠存儲比較複雜的數據類型。Mongo最大的特色是他支持的查詢語言很是強大,其語法有點相似於面向對象的查詢語言,幾乎能夠實現相似關係數據庫單表查詢的絕大部分功能,並且還支持對數據創建索引MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔,數組及文檔數組。文檔是MongoDB中數據的基本單元,很是相似於關係型數據庫管理系統中的行,但更具表現力!html
二、MongoDB特色java
MongoDB的提供了一個面向文檔存儲,操做起來比較簡單和容易。node
你能夠在MongoDB記錄中設置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現更快的排序。linux
你能夠經過本地或者網絡建立數據鏡像,這使得MongoDB有更強的擴展性。git
若是負載的增長(須要更多的存儲空間和更強的處理能力) ,它能夠分佈在計算機網絡中的其餘節點上這就是所謂的分片。web
Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。正則表達式
MongoDb 使用update()命令能夠實現替換完成的文檔(數據)或者一些指定的數據字段 。redis
Mongodb中的Map/reduce主要是用來對數據進行批量處理和聚合操做。
Map和Reduce。Map函數調用emit(key,value)遍歷集合中全部的記錄,將key與value傳給Reduce函數進行處理。
Map函數和Reduce函數是使用Javascript編寫的,並能夠經過db.runCommand或mapreduce命令來執行MapReduce操做。
GridFS是MongoDB中的一個內置功能,能夠用於存放大量小文件。
MongoDB容許在服務端執行腳本,能夠用Javascript編寫某個函數,直接在服務端執行,也能夠把函數的定義存儲在服務端,下次直接調用便可。
MongoDB支持各類編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
MongoDB安裝簡單。
三、NoSQL簡介
NoSQL(NoSQL = Not Only SQL ),意即"不只僅是SQL"。在現代的計算系統上天天網絡上都會產生龐大的數據量。
這些數據有很大一部分是由關係數據庫管理系統(RDMBSs)來處理。 1970年 E.F.Codd's提出的關係模型的論文 "A relational model of data for large shared data banks",這使得數據建模和應用程序編程更加簡單。經過應用實踐證實,關係模型是很是適合於客戶服務器編程,遠遠超出預期的利益,今天它是結構化數據存儲在網絡和商務應用的主導技術。
NoSQL 是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢愈加高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的關係型數據庫運用,這一律念無疑是一種全新的思惟的注入。
四、關係型數據庫遵循ACID規則
事務在英文中是transaction,和現實世界中的交易很相似,它有以下四個特性:
a、A (Atomicity) 原子性
原子性很容易理解,也就是說事務裏的全部操做要麼所有作完,要麼都不作,事務成功的條件是事務裏的全部操做都成功,只要有一個操做失敗,整個事務就失敗,須要回滾。
好比銀行轉帳,從A帳戶轉100元至B帳戶,分爲兩個步驟:1)從A帳戶取100元;2)存入100元至B帳戶。這兩步要麼一塊兒完成,要麼一塊兒不完成,若是隻完成第一步,第二步失敗,錢會莫名其妙少了100元。
b、C (Consistency) 一致性
一致性也比較容易理解,也就是說數據庫要一直處於一致的狀態,事務的運行不會改變數據庫本來的一致性約束。
例如現有完整性約束a+b=10,若是一個事務改變了a,那麼必須得改變b,使得事務結束後依然知足a+b=10,不然事務失敗。
c、I (Isolation) 獨立性
所謂的獨立性是指併發的事務之間不會互相影響,若是一個事務要訪問的數據正在被另一個事務修改,只要另一個事務未提交,它所訪問的數據就不受未提交事務的影響。
好比現有有個交易是從A帳戶轉100元至B帳戶,在這個交易還未完成的狀況下,若是此時B查詢本身的帳戶,是看不到新增長的100元的。
d、D (Durability) 持久性
持久性是指一旦事務提交後,它所作的修改將會永久的保存在數據庫上,即便出現宕機也不會丟失。
五、RDBMS vs NoSQL
RDBMS
- 高度組織化結構化數據
- 結構化查詢語言(SQL) (SQL)
- 數據和關係都存儲在單獨的表中。
- 數據操縱語言,數據定義語言
- 嚴格的一致性
- 基礎事務
NoSQL
- 表明着不只僅是SQL
- 沒有聲明性查詢語言
- 沒有預約義的模式
-鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫
- 最終一致性,而非ACID屬性
- 非結構化和不可預知的數據
- CAP定理
- 高性能,高可用性和可伸縮性
六、CAP定理(CAP theorem)
在計算機科學中, CAP定理(CAP theorem), 又被稱做 布魯爾定理(Brewer's theorem), 它指出對於一個分佈式計算系統來講,不可能同時知足如下三點:
一致性(Consistency) (全部節點在同一時間具備相同的數據)
可用性(Availability) (保證每一個請求無論成功或者失敗都有響應)
分隔容忍(Partition tolerance) (系統中任意信息的丟失或失敗不會影響系統的繼續運做)
CAP理論的核心是:一個分佈式系統不可能同時很好的知足一致性,可用性和分區容錯性這三個需求,最多隻能同時較好的知足兩個。
所以,根據 CAP 原理將 NoSQL 數據庫分紅了知足 CA 原則、知足 CP 原則和知足 AP 原則三 大類:
CA - 單點集羣,知足一致性,可用性的系統,一般在可擴展性上不太強大。
CP - 知足一致性,分區容忍性的系統,一般性能不是特別高。
AP - 知足可用性,分區容忍性的系統,一般可能對一致性要求低一些。
七、NoSQL的優勢/缺點
優勢:
- 高可擴展性
- 分佈式計算
- 低成本
- 架構的靈活性,半結構化數據
- 沒有複雜的關係
缺點:
- 沒有標準化
- 有限的查詢功能(到目前爲止)
- 最終一致是不直觀的程序
BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定義。
CAP理論的核心是:一個分佈式系統不可能同時很好的知足一致性,可用性和分區容錯性這三個需求,最多隻能同時較好的知足兩個。
BASE是NoSQL數據庫一般對可用性及一致性的弱要求原則:
Basically Availble --基本可用
Soft-state --軟狀態/柔性事務。 "Soft state" 能夠理解爲"無鏈接"的, 而 "Hard state" 是"面向鏈接"的
Eventual Consistency --最終一致性 最終一致性, 也是是 ACID 的最終目的。
注:上圖參考網上
2、MongoDB的Yum安裝方式
一、MonggoDB支持如下平臺:
OS X 32-bit OS X 64-bit Linux 32-bit Linux 64-bit Windows 32-bit Windows 64-bit Solaris i86pc Solaris 64 下載地址: http://www.mongodb.org/downloads。
二、配置yum源
安裝epel源(版本較低),以下:
# yum list all | grep mongodb libmongodb.i686 2.4.14-1.el6 epel libmongodb.x86_64 2.4.14-1.el6 epel libmongodb-devel.i686 2.4.14-1.el6 epel libmongodb-devel.x86_64 2.4.14-1.el6 epel mongodb.x86_64 2.4.14-1.el6 epel mongodb-server.x86_64 2.4.14-1.el6 epel nodejs-mongodb.noarch 1.3.19-4.el6 epel 安裝: #yum install mongodb -y 2.6版本yum源 #vi /etc/yum.repos.d/mongodb-org-2.6.repo [mongodb-org-2.6] name=MongoDB 2.6 Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/ gpgcheck=0 enabled=1 安裝: #yum --enablerepo=mongodb-org-3.4 install mongodb-org -y 3.4版本yum源 #vi /etc/yum.repos.d/mongodb-org-3.4.repo [mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey= 這裏配置的是mongodb的3.4版本的yum源 開始安裝 #yum install -y mongodb-org 或者 #yum --enablerepo=mongodb-org-3.4 install mongodb-org -y 若是報錯將mongodb-org-3.4.repo中的https改成http! 若是繼續報錯以下: GPG key retrieval failed: [Errno 14] Peer cert cannot be verified or peer cert invalid 將mongodb-org-3.4.repo中的gpgcheck和enabled值改成0 (有風險,測試環境可用) 查看是否安裝成功 #which mongod /usr/bin/mongod 查看安裝了哪些軟件包: #rpm -qa mongodb-* mongodb-org-server-3.4.2-1.el6.x86_64 mongodb-org-mongos-3.4.2-1.el6.x86_64 mongodb-org-3.4.2-1.el6.x86_64 mongodb-org-shell-3.4.2-1.el6.x86_64 mongodb-org-tools-3.4.2-1.el6.x86_64 啓動MongoDB service mongod start Starting mongod: [ OK ] 注:yum安裝好MongoDB以後,默認數據存放目錄是/var/lib/mongo,日誌數據存放在/var/log/mongodb 目錄中 啓動後,查看日誌 #cat /var/log/mongodb/mongod.log 2016-08-31T20:48:22.771+0800 I CONTROL [main] ***** SERVER RESTARTED ***** 2016-08-31T20:48:22.776+0800 I CONTROL [initandlisten] MongoDB starting : pid=22171 port=27017 dbpath=/var/lib/mongo 64-bit host=elk 2016-08-31T20:48:22.776+0800 I CONTROL [initandlisten] db version v3.4.2 2016-08-31T20:48:22.776+0800 I CONTROL [initandlisten] git version: 3f76e40c105fc223b3e5aac3e20dcd026b83b38b 2016-08-31T20:48:22.776+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 2016-08-31T20:48:22.776+0800 I CONTROL [initandlisten] allocator: tcmalloc 2016-08-31T20:48:22.776+0800 I CONTROL [initandlisten] modules: none 2016-08-31T20:48:22.776+0800 I CONTROL [initandlisten] build environment: 2016-08-31T20:48:22.776+0800 I CONTROL [initandlisten] distmod: rhel62 2016-08-31T20:48:22.776+0800 I CONTROL [initandlisten] distarch: x86_64 2016-08-31T20:48:22.776+0800 I CONTROL [initandlisten] target_arch: x86_64 2016-08-31T20:48:22.776+0800 I CONTROL [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1", port: 27017 }, processManagement: { fork: true, pidFilePath: "/var/run/mongodb/mongod.pid" }, storage: { dbPath: "/var/lib/mongo", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } } 2016-08-31T20:48:22.794+0800 I STORAGE [initandlisten] 2016-08-31T20:48:22.794+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 2016-08-31T20:48:22.794+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem 2016-08-31T20:48:22.794+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=424M,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0), 2016-08-31T20:48:22.836+0800 I CONTROL [initandlisten] 2016-08-31T20:48:22.836+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2016-08-31T20:48:22.836+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2016-08-31T20:48:22.836+0800 I CONTROL [initandlisten] 2016-08-31T20:48:22.836+0800 I CONTROL [initandlisten] 2016-08-31T20:48:22.836+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 2016-08-31T20:48:22.836+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2016-08-31T20:48:22.837+0800 I CONTROL [initandlisten] 2016-08-31T20:48:22.837+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2016-08-31T20:48:22.837+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2016-08-31T20:48:22.837+0800 I CONTROL [initandlisten] 2016-08-31T20:48:22.837+0800 I CONTROL [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files. 2016-08-31T20:48:22.837+0800 I CONTROL [initandlisten] 2016-08-31T20:48:22.842+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongo/diagnostic.data' 2016-08-31T20:48:22.849+0800 I INDEX [initandlisten] build index on: admin.system.version properties: { v: 2, key: { version: 1 }, name: "incompatible_with_version_32", ns: "admin.system.version" } 2016-08-31T20:48:22.849+0800 I INDEX [initandlisten] building index using bulk method; build may temporarily use up to 500 megabytes of RAM 2016-08-31T20:48:22.849+0800 I INDEX [initandlisten] build index done. scanned 0 total records. 0 secs 2016-08-31T20:48:22.850+0800 I COMMAND [initandlisten] setting featureCompatibilityVersion to 3.4 2016-08-31T20:48:22.850+0800 I NETWORK [thread1] waiting for connections on port 27017 能夠看到有幾個WARNING,查看是否啓動成功了: #netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 4678/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 4759/master tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 22171/mongod tcp 0 0 10.0.90.24:6379 0.0.0.0:* LISTEN 4809/redis-server 1 tcp 0 0 :::22 :::* LISTEN 4678/sshd tcp 0 0 ::1:25 :::* LISTEN 4759/master # ps aux | grep mongod mongod 22171 0.5 2.1 321852 41272 ? Sl 20:48 0:03 /usr/bin/mongod -f /etc/mongod.conf root 22206 0.0 0.0 103244 872 pts/1 S+ 20:59 0:00 grep mongod 能夠看到端口和進程都在,說明啓動成功了! 下面分析一下剛纔日誌中的幾個warning:、 第一個: WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 意思是:強烈建議使用帶WiredTiger存儲引擎的XFS文件系統 XFS文件系統:XFS一種高性能的日誌文件系統,最先於1993年,由Silicon Graphics爲他們的IRIX操做系統而開發, 是IRIX 5.3版的默認文件系統。2000年5月,Silicon Graphics以GNU通用公共許可證發佈這套系統的源代碼,以後 被移植到Linux 內核上。XFS 特別擅長處理大文件,同時提供平滑的數據傳輸。 既然是warning說明不會影響mongodb的正常使用,只是提醒你安裝mongodb最好使用ext4或者xfs文件系統! 本人系統已是ext4系統了! 第二個: WARNING: Access control is not enabled for the database. 意思是:未對數據庫啓用訪問控制,對數據和配置的讀寫訪問不受限制(危險的warning) 第三個:WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. #cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never 關閉命令: #echo never > /sys/kernel/mm/transparent_hugepage/enabled 第四個:WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 須要將/sys/kernel/mm/transparent_hugepage/defrag設置爲never #cat /sys/kernel/mm/transparent_hugepage/defrag [always] madvise never 關閉命令: #echo never > /sys/kernel/mm/transparent_hugepage/defrag 第五個:WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 設置ulimit #vi /etc/security/limits.conf mongod soft nofile 64000 mongod hard nofile 64000 mongod soft nproc 32000 mongod hard nproc 32000 重啓mongodb #service mongod restart 就不會報這個warning了,不過仍是會有第一個和第二個warning,下面再介紹!
3、MongoDB使用
MongoDB默認是沒有設置鑑權的,業界大部分使用MongoDB的項目也沒有設置訪問權限。這就意味着只要知道MongoDB服務器的端口,任何能訪問到這臺服務器的人均可以查詢和操做MongoDB數據庫的內容。在一些項目當中,這種使用方式會被當作是一種安全漏洞。
一、第一次進入mongodb
可使用MongoDB shell 來鏈接 MongoDB 服務器。也可使用 PHP 來鏈接 MongoDB。這裏咱們會使用 MongoDB shell 來鏈接 Mongodb 服務,以後咱們將會介紹如何經過php 來鏈接MongoDB服務。
標準 URI 鏈接語法:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] mongodb:// 這是固定的格式,必需要指定。 username:password@ 可選項,若是設置,在鏈接數據庫服務器以後,驅動都會嘗試登錄這個數據庫 host1 必須的指定至少一個host, host1 是這個URI惟一要填寫的。它指定了要鏈接服務器的地址。若是要鏈接複製集,請指定多個主機地址。 portX 可選的指定端口,若是不填,默認爲27017 /database 若是指定username:password@,鏈接並驗證登錄指定數據庫。若不指定,默認打開admin數據庫。 ?options 是鏈接選項。若是不使用/database,則前面須要加上/。全部鏈接選項都是鍵值對name=value,鍵值對之間經過&或;(分號)隔開
使用shell的方式鏈接:
#mongo MongoDB shell version v3.4.2 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.2 Server has startup warnings: 2016-08-31T22:13:06.344+0800 I STORAGE [initandlisten] 2016-08-31T22:13:06.344+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 2016-08-31T22:13:06.344+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem 2016-08-31T22:13:06.571+0800 I CONTROL [initandlisten] 2016-08-31T22:13:06.571+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2016-08-31T22:13:06.571+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2016-08-31T22:13:06.571+0800 I CONTROL [initandlisten] > show databases;show databases; #查看數據庫 admin 0.000GB local 0.000GB >use admin #切換數據庫 >switched to db admin 以下這種方式也能夠 #mongo mongodb://127.0.0.1:27017 MongoDB shell version v3.4.2 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.2 Server has startup warnings: 2016-09-02T21:07:29.630+0800 I STORAGE [initandlisten] 2016-09-02T21:07:29.630+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 2016-09-02T21:07:29.630+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem 2016-09-02T21:07:29.978+0800 I CONTROL [initandlisten] 2016-09-02T21:07:29.978+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2016-09-02T21:07:29.978+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2016-09-02T21:07:29.978+0800 I CONTROL [initandlisten] > 開啓MongoDB的web界面訪問 MongoDB自帶一個微型的web管理信息界面,須要修改/etc/mongod.conf中的一個配置項: net: port: 27017 bindIp: 10.0.90.24 http: enabled: true #設置爲true RESTInterfaceEnabled: false #設置爲false 注:若是bindIp爲127.0.0.1,只能在本機使用curl查看,沒法再瀏覽器訪問! 重啓mongodb,會自動監聽28017端口,而後訪問,在瀏覽器輸入:http://10.0.90.24:28017/,以下圖:
其中mongodbserver爲mongodb服務器的hostname,還有其餘一些鏈接信息!不過web界面方式使用很少。
注:若是設置了net.http.enabled等於true,而且開啓了security.authorization等於enabled,在瀏覽器訪問http://10.0.90.24:28017/的時候,會提示輸入用戶名和密碼,以下圖:
二、爲MongoDB建立用戶管理員
MongoDB中,每一個數據庫的實例均可擁有多個用戶,安全檢查開啓後,只要經過身份驗證的用戶纔可以進行數據的讀寫操做。admin(管理員)和local(本地)是兩個特殊的數據庫,它們當中的用戶可對任何數據庫進行操做。這兩個數據庫中的用戶可被看做是超級用戶。經認證後,管理員用戶可對任何數據庫進行讀寫,同事能執行某些只有管理員才能執行的命令,如listDatabases和shutDown。
在默認狀況下,mongod是監聽在127.0.0.1之上的,任何客戶端均可以直接鏈接27017,且沒有認證。這樣作的好處是,用戶能夠即時上手,不用擔憂被一堆配置弄的心煩意亂。然而壞處也是顯而易見,若是直接在公網服務器上如此搭建MongoDB,那麼全部人均可以直接訪問並修改數據庫數據了。
默認狀況下,mongod也是沒有管理員帳戶的。所以除非你在admin數據庫中使用db.addUser()命令添加了管理員賬號,且使用--auth參數啓動mongod,不然在數據庫中任何人均可以無需認證執行全部命令,包括delete和shutdown。此外,mongod還會默認監聽28017端口,一樣是綁定全部ip。這是一個mongod自帶的web監控界面。從中能夠獲取到數據庫當前鏈接、log、狀態、運行系統等信息。若是你開啓了--rest參數,甚至能夠直接經過web界面查詢數據,執行mongod命令。
其實MongoDB自己有很是詳細的安全配置準則,顯然開發者也是想到了,然而他是將安全的任務推給用戶去解決,這自己的策略就是偏向易用性的,對於安全性,則得靠邊站了。
注:每一個數據庫都有本身的用戶,建立用戶的命令是db.createUser(),當你建立一個用戶時,該用戶就屬於你當前所在的數據庫。
MongoDB有一個比較奇怪的設置是,即使是一個admin用戶,受權也必須在admin數據庫下進行,而不能在其餘數據庫下進行。而受權以後admin用戶就能夠在任何數據庫下進行任何操做了。固然數據庫級別的用戶在他本身的數據庫下受權以後是不能到其餘數據庫進行操做的
每一個用戶包含三個要素:用戶名、密碼和角色列表。下面是一個例子:
{ user: "dbuser", pwd : "dbpass", roles: ["readWrite", "clusterAdmin"] }
這個例子表示一個名爲dbuser的用戶,它在當前的數據庫中擁有readWrite和clusterAdmin兩個角色。
注:MongoDB內置了不少角色,但要注意,不是每一個數據庫的內置角色都同樣。其中admin數據庫就包含了一些其餘數據庫所沒有的角色。熟悉Oracle的朋友都知道,數據庫用戶有兩種,一種是管理員,用來管理用戶;一種是普通用戶,用來訪問數據。相似的,爲MongoDB規劃用戶鑑權時,至少要規劃兩種角色:用戶管理員和數據庫用戶。若是搭建了分片或主從,可能還會要規劃數據庫架構管理員的角色,它們專門用來調整數據庫的分佈式架構。
下面是一個建立用戶管理員的操做例子:
> use admin switched to db admin > db.createUser({user:"root",pwd:"test123",roles:["userAdminAnyDatabase"]}) Successfully added user: { "user" : "root", "roles" : [ "userAdminAnyDatabase" ] } 而後登錄測試一下 > use admin switched to db admin > db.auth("root","test123") 1 注:db.auth()方法返回1表示登陸成功。 查看用戶 >show users; { "_id" : "admin.root", "user" : "root", "db" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } 設置完後,MongoDB客戶端必須用正確的用戶名和密碼登陸,才能在指定的數據庫中操做。
下面是一個如何建立數據庫用戶的例子:
首先保證你已經以用戶管理員的身份登陸admin數據庫。而後用use命令切換到目標數據庫,一樣用db.createUser() 命令來建立用戶,其中角色名爲「readWrite」,普通的數據庫用戶角色有兩種,read和readWrite。顧名思義, 前者只能讀取數據不能修改,後者能夠讀取和修改。 > use admin switched to db admin > db.auth("root","test123") 1 > show dbs; admin 0.000GB local 0.000GB test 0.000GB > use test switched to db test > db test #建立一個名爲testuser123的用戶,密碼設置爲123456,以下: > db.createUser({user:"testuser123",pwd:"123456,",roles:["readWrite"]}) Successfully added user: { "user" : "testuser123", "roles" : [ "readWrite" ] } > db.auth("testuser123","123456,") 1 #認證經過 以上就實現了爲test庫建立了一個普通用戶!!! 注意:普通用戶就算認證db.auth()經過以後,也沒有權限執行show dbs命令,只能用db命令查看當前數據庫!
三、在配置文件中開啓mongodb鏈接認證功能
注:若是不開啓認證功能,任何人只要能夠ssh到mongodb的服務器,均可以進行增刪改查等操做,這樣 是很危險的。 在配置文件mongod.conf中開啓,以下: security: authorization: enabled 而後重啓mongodb就開啓了認證功能,測試以下: #mongo --host 10.0.90.24 #若是是監聽的127.0.0.1,就不須要加--host 參數了 MongoDB shell version v3.4.2 connecting to: mongodb://10.0.90.24:27017/ MongoDB server version: 3.4.2 > 能夠看到增長了認證功能,就不會提示上面提到的第一個和第二個WARNING了。 而後直接執行show dbs 看看會不會列出全部的數據庫 > show dbs 2017-02-13T11:54:45.562+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }", "code" : 13, "codeName" : "Unauthorized" } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1 shellHelper.show@src/mongo/shell/utils.js:755:19 shellHelper@src/mongo/shell/utils.js:645:15 @(shellhelp2):1:1 > 能夠看到提示相似「not authorized on admin to execute command」說明若是不進行權限認證,就無 法進行其餘操做,那麼咱們進行認證,以下: > use admin switched to db admin > db.auth("root","test123") 1 > show dbs;show dbs; admin 0.000GB local 0.000GB test 0.000GB 說明認證經過,能夠查看全部的數據庫了!!! 一個例子: #mongo --host 10.0.90.24 #進入mongodb MongoDB shell version v3.4.2 connecting to: mongodb://10.0.90.24:27017/ MongoDB server version: 3.4.2 > use web switched to db web > db.auth("xlg","123456,")db.auth("xlg","123456,") 1 > show dbs;show dbs; #根據提示能夠看出普通用戶沒法執行show dbs命令 2017-02-13T15:33:32.816+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }", "code" : 13, "codeName" : "Unauthorized" } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1 shellHelper.show@src/mongo/shell/utils.js:755:19 shellHelper@src/mongo/shell/utils.js:645:15 @(shellhelp2):1:1 > db web > db.web.findOne()db.web.findOne() #查看數據 { "_id" : ObjectId("58a14e272fede9a9e553f929"), "name" : "james", "age" : "10" } > db.web.findOne({"name":"house"}) #查看name等於house的數據 { "_id" : ObjectId("58a150492fede9a9e553f92a"), "name" : "curry", "age" : "9" } > use admin #切換到admin庫 switched to db admin > db.auth("root","test123")db.auth("root","test123") #用管理員root認證 1 > db admin > use web #切換到其餘庫 switched to db web > db web > db.web.findOne()db.web.findOne() #查看數據 { "_id" : ObjectId("58a14e272fede9a9e553f929"), "name" : "james", "age" : "10" } > db.web.findOne({"name":"house"})db.web.findOne({"name":"house"}) { "_id" : ObjectId("58a150492fede9a9e553f92a"), "name" : "curry", "age" : "9" } 注意:若是想用admin超級用戶查看除了admin以外的數據庫,先用普通用戶登陸認證,而後切換到admin 庫,再進行認證後,才能夠繼續其餘操做。如上面的小例子 刪除一個用戶 >db.system.users.remove({"user" : "test_user"}); 刪除一個test_user用戶
四、mongodb建立、刪除、插入數據命令使用
> use test #建立一個test數據庫 switched to db test > db #列出當前db名稱,爲test test 若是想列出全部數據庫,使用show dbs命令 > show dbs; admin 0.000GB local 0.000GB 可是並無看到剛纔咱們建立的test數據庫,那是由於test數據庫是空的,咱們插入一條數據 > use test switched to db test > db test > db.test.insert({"name":"ceshishuju"})db.test.insert({"name":"ceshishuju"}) WriteResult({ "nInserted" : 1 }) > show dbsshow dbs admin 0.000GB local 0.000GB test 0.000GB #test 數據庫就顯示了 而後刪除數據庫 > use test switched to db test > db.dropDatabase(); { "dropped" : "test", "ok" : 1 } > show dbs;show dbs; admin 0.000GB local 0.000GB #能夠看到test庫刪掉了 基本查看數據 > use test switched to db test > db.test.findOne() { "_id" : ObjectId("57c8206a8a704e1515c76e7b"), "name" : "ceshishuju" } 能夠看到插入的數據這裏能夠查看到了! 多條件查詢,一個例子: 下面的示例等同於SQL語句的where name = "stephen" and age = 35 > db.test.find({"name":"stephen","age":35}) { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35, "genda" : "male", "email" : "stephen@hotmail.com" } 返回指定的文檔鍵值對。下面的示例將只是返回name和age鍵值對。 > db.test.find({}, {"name":1,"age":1}) { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35 } 指定不返回的文檔鍵值對。下面的示例將返回除name以外的全部鍵值對。 > db.test.find({}, {"name":0}) { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "age" : 35, "genda" : "male", "email" : "stephen@hotmail.com" } 網上關於mongodb查詢的博客: http://www.cnblogs.com/stephen-liu74/archive/2012/08/03/2553803.html
五、mongodb存儲引擎介紹
存儲引擎(Storage Engine)是MongoDB的核心組件,負責管理數據如何存儲在硬盤(Disk)和內存(Memory)上。從MongoDB 3.2 版本開始,MongoDB 支持多數據存儲引擎(Storage Engine),MongoDB支持的存儲引擎有:WiredTiger,MMAPv1和In-Memory。
從MongoDB 3.2版本開始,WiredTiger成爲MongDB默認的Storage Engine,用於將數據持久化存儲到硬盤文件中,WiredTiger提供文檔級別(Document-Level)的併發控制,檢查點(CheckPoint),數據壓縮和本地數據加密( Native Encryption)等功能。
MongoDB不只能將數據持久化存儲到硬盤文件中,並且還能將數據只保存到內存中;In-Memory存儲引擎用於將數據只存儲在內存中,只將少許的元數據和診斷日誌(Diagnostic)存儲到硬盤文件中,因爲不須要Disk的IO操做,就能獲取索取的數據,In-Memory存儲引擎大幅度下降了數據查詢的延遲(Latency)
查看MongoDB的默認存儲引擎:
#echo "db.serverStatus()"| mongo|grep wiredTiger "name" : "wiredTiger", "wiredTiger" : { 在mongod.conf中設置: storage: dbPath: /var/lib/mongo journal: enabled: true engine: wiredTiger #設置
WiredTiger和MMAPv1都用於持久化存儲數據,相對而言,WiredTiger比MMAPv1更新,功能更強大!
一篇很好地學習文章:http://www.cnblogs.com/ljhdo/archive/2016/10/30/4947357.html
4、MongoDB使用注意事項以及性能優化
一、Test every query in your application with explain(). 使用explain()測試應用程序中的每一個查詢。 MongoDB provides the ability to view how a query will be evaluated in the system, including which indexes are used and whether the query is covered. This capability is similar to the Explain Plan and similar features in relational databases. The feedback from explain() will help you understand whether your query is performing optimally. 二、Avoid scatter-gather queries. 避免分散-彙集查詢 In sharded systems, queries that cannot be routed to a single shard must be broadcast to multiple shards for evaluation. Because these queries involve multiple shards for each request they do not scale well as more shards are added. 三、Your operational applications should only read from primaries. 你的操做應用程序只應從主節點讀取 (待考證) Updates are typically replicated to secondaries quickly, depending on network latency. However, reads on the secondaries will not be consistent with reads on the primary. Note that the secondaries are not idle as they must process all writes replicated from the primary. To increase read capacity in your operational system consider sharding. Secondary reads can be useful for analytics and ETL applications as this approach will isolate traffic from operational workloads. You may choose to read from secondaries if your application can tolerate eventual consistency. 四、Use the most recent drivers from MongoDB. 使用MongoDB最新的驅動程序 MongoDB supports drivers for nearly a dozen languages. These drivers are engineered by the same team that maintains the database kernel. Drivers are updated more frequently than the database, typically every two months. Always use the most recent version of the drivers when possible. Install native extensions if available for your language. Join the MongoDB community mailing list to keep track of updates. 五、Store all data for a record in a single document. 將記錄的全部數據存儲在單個文檔中 MongoDB provides ACID compliance at the document level. When data for a record is stored in a single document the entire record can be retrieved in a single seek operation, which is very efficient. In some cases it may not be practical to store all data in a single document, or it may negatively impact other operations. Make the trade-offs that are best for your application. 六、Avoid large documents. 避免使用大文檔 The maximum size for documents in MongoDB is 16 MB. In practice most documents are a few kilobytes or less. Consider documents more like rows in a table than the tables themselves. Rather than maintaining lists of records in a single document, instead make each record a document. For large media items, such as video or p_w_picpaths, consider using GridFS, a convention implemented by all the drivers that automatically stores the binary data across many smaller documents. 七、Avoid large indexed arrays. 避免使用大型索引數組 Rather than storing a large array of items in an indexed field, store groups of values across multiple fields. Updates will be more efficient. 八、Avoid unnecessarily long field names. 避免沒必要要的長字段名稱 Field names are repeated across documents and consume space. By using smaller field names your data will consume less space, which allows for a larger number of documents to fit in RAM. Note that with WiredTiger's native compression, long field names have less of an impact on the amount of disk space used but the impact on RAM is the same. 九、Use caution when considering indexes on low-cardinality fields. 在考慮低基數字段上的索引時,請謹慎 Queries on fields with low cardinality can return large result sets. Avoid returning large result sets when possible. Compound indexes may include values with low cardinality, but the value of the combined fields should exhibit high cardinality. 十、Eliminate unnecessary indexes. 取消沒必要要的索引。 Indexes are resource-intensive: even with compression enabled they consume RAM, and as fields are updated their associated indexes must be maintained, incurring additional disk I/O overhead. 十一、Remove indexes that are prefixes of other indexes. 刪除做爲其餘索引的前綴的索引。 Compound indexes can be used for queries on leading fields within an index. For example, a compound index on last name, first name can be also used to filter queries that specify last name only. In this example an additional index on last name only is unnecessary; the compound index is sufficient for queries on last name as well as last name and first name. 十二、Use a compound index rather than index intersection. 使用複合索引而不是索引交集 For best performance when querying via multiple predicates, compound indexes will generally be a better option. 1三、Avoid regular expressions that are not left anchored or rooted. 避免沒有留下錨定或生根的正則表達式。 Indexes are ordered by value. Leading wildcards are inefficient and may result in full index scans. Trailing wildcards can be efficient if there are sufficient case-sensitive leading characters in the expression. 1四、Use index optimizations available in the WiredTiger storage engine. 使用WiredTiger存儲引擎中提供的索引優化(3.0版本以後默認是WiredTiger引擎) As discussed earlier, the WiredTiger engine compresses indexes by default. In addition, administrators have the flexibility to place indexes on their own separate volume, allowing for faster disk paging and lower contention. 1五、Use RAID10. 使用raid10 Most MongoDB deployments should use RAID-10. RAID-5 and RAID-6 have limitations and may not provide sufficient performance. RAID-0 provides good read and write performance, but insufficient fault tolerance. MongoDB's replica sets allow deployments to provide stronger availability for data, and should be considered with RAID and other factors to meet the desired availability SLA. 1六、Use multiple devices for different databases – WiredTiger. 對不一樣的數據庫使用多個設備 - WiredTiger。 Set directoryForIndexes so that indexes are stored in separate directories from collections and directoryPerDB to use a different directory for each database. The various directories can then be mapped to different storage devices, thus increasing overall throughput. Note that using different storage devices will affect your ability to create snapshot-style backups of your data, since the files will be on different devices and volumes. 1七、Use EXT4 or XFS file systems; avoid EXT3. 避免使用ext3文件系統,使用ext4或者xfs文件系統 EXT3 is quite old and is not optimal for most database workloads. For example, MMAPv1 preallocates space for data. In EXT3 preallocation will actually write 0s to the disk to allocate the space, which is time consuming. In EXT4 and XFS preallocation is performed as a logical operation, which is much more efficient. With the WiredTiger storage engine, use of XFS is strongly recommended to avoid performance issues that have been observed when using EXT4 with WiredTiger.
5、MongonDB 3.4.2版本配置文件參數詳解
官網連接地址:
https://docs.mongodb.com/manual/reference/configuration-options/
注:配置參數是分級式的,好比net.http.RESTInterfaceEnabled其實在mongodb.conf中配置爲: net: port: 27017 bindIp: 127.0.0.1 http: enabled: true RESTInterfaceEnabled: false 全部下面都以net.http.RESTInterfaceEnabled這種方式介紹 參數類型一共三種: string 字符串 boolean 布爾型 false/true integer ××× 一、systemLog 選項以下: systemLog.verbosity --用法:verbosity: <integer> 日誌文件輸出的級別,越大級別越低,默認是0 systemLog.quiet --用法: quite: boolean 在quite模式下會限制輸出信息: 數據庫命令輸出,副本集活動,鏈接接受事件,鏈接關閉事件。 systemLog.traceAllExceptions --用法:traceAllExceptions: boolean 打印用於調試的詳細信息。 用於其餘日誌記錄以進行支持相關的故障排除。 systemLog.syslogFacility --用法:syslogFacility: string,默認爲user 指定syslog日誌信息的設備級別,須要指定--syslog來使用這個選項。 systemLog.logAppend --用法:logAppend: boolean 是否啓用追加日誌 systemLog.destination --用法:destination:string ,默認爲file 指定一個文件或syslog。若是指定爲文件,必須同時指定systemLog.path systemLog.path --用法:path: string 好比:/var/log/mongodb/mongod.log 日誌路徑 systemLog.logRotate --用法:logRotate: string ,默認值爲rename,另外一個是reopen 能夠實現rotage日誌,實現日誌切割 systemLog.timeStampFormat --用法:timeStampFormat: string 默認值爲 iso8601-local 日誌消息中時間戳的時間格式。還有ctime、iso8601-utc格式 二、storage 選項用法: 範例: storage: dbPath: <string> indexBuildRetry: <boolean> repairPath: <string> journal: enabled: <boolean> commitIntervalMs: <num> directoryPerDB: <boolean> syncPeriodSecs: <int> engine: <string> mmapv1: preallocDataFiles: <boolean> nsSize: <int> quota: enforced: <boolean> maxFilesPerDB: <int> smallFiles: <boolean> journal: debugFlags: <int> commitIntervalMs: <num> wiredTiger: engineConfig: cacheSizeGB: <number> journalCompressor: <string> directoryForIndexes: <boolean> collectionConfig: blockCompressor: <string> indexConfig: prefixCompression: <boolean> inMemory: engineConfig: inMemorySizeGB: <number> 具體參數的解釋: storage.dbPath --用法:dbPath: string 默認是/data/db(linux) ;\data\db (windows) 注意:若是是yum安裝的mongodb,默認是/var/lib/mongo mongodb數據存儲的路徑 storage.indexBuildRetry --用法:indexBuildRetry: boolean 默認值是true 指定數據庫在索引創建過程當中中止,重啓後是否從新創建索引。 storage.repairPath --用法:repairPath: string 默認值是:A _tmp_repairDatabase_<num> ( directory under the dbPath. ) 在--repair操做期間MongoDB將使用的工做目錄。當--repair結束後,storage.repairPath 目錄變爲空 注:storage.repairPath設置僅可用於mongod。 storage.journal.enabled --用法:journal.enabled: boolean 64bit操做系統默認爲true,32bit操做系統默認爲false 啓用或禁用持久性日誌以確保數據文件保持有效和可恢復,此選項僅在您指定--dbpath選項時適用。 storage.journal.commitIntervalMs --用法:journal.commitIntervalMs: number mongod進程在日誌操做之間容許的最大時間(以毫秒爲單位),較低的值會增長日誌的持久性,但會下降磁盤性能。 範圍是1-500,默認值是100 毫秒。 storage.directoryPerDB --用法:directoryPerDB: boolean 默認值時false 當爲true時,MongoDB使用單獨的目錄來存儲每一個數據庫的數據,目錄位於storage.dbPath目錄下,每一個子目錄名稱對應於數據庫名稱。 storage.syncPeriodSecs --用法:syncPeriodSecs: number 默認爲60,不要設置爲0 MongoDB經過fsync操做將數據刷新到數據文件以前能夠通過的時間量。 特別注意:不要在生產系統上設置此值 storage.engine --用法: engine: wiredTiger 默認值爲wiredTiger 設置mongodb的存儲引擎。還有mmapv1和inMemory storage.wiredTiger.engineConfig.cacheSizeGB --用法:cacheSizeGB: float WiredTiger將用於全部數據的內部緩存的最大大小。值的範圍能夠從256MB到10TB,能夠是浮點數。 此外,默認值也已更改。 從3.4開始,WiredTiger內部緩存默認使用如下二者中較大的一個: 50% of RAM minus 1 GB(50%的RAM減去1 GB), or 256 MB. 三、net 選項用法: net: port: <int> bindIp: <string> maxIncomingConnections: <int> wireObjectCheck: <boolean> ipv6: <boolean> unixDomainSocket: enabled: <boolean> pathPrefix: <string> filePermissions: <int> http: enabled: <boolean> JSONPEnabled: <boolean> RESTInterfaceEnabled: <boolean> ssl: sslOnNormalPorts: <boolean> # deprecated since 2.6 mode: <string> PEMKeyFile: <string> PEMKeyPassword: <string> clusterFile: <string> clusterPassword: <string> CAFile: <string> CRLFile: <string> allowConnectionsWithoutCertificates: <boolean> allowInvalidCertificates: <boolean> allowInvalidHostnames: <boolean> disabledProtocols: <string> FIPSMode: <boolean> net.port --用法 port: integer 默認值是27017 mongodb監聽的端口 net.bindIp --用法 bindIp: string 默認值是127.0.0.1 mongodb監聽的ip地址,也能夠自定義 net.maxIncomingConnections --用法:maxIncomingConnections: integer 默認值是65536 mongos或mongod將接受的最大併發鏈接數,若是此設置高於操做系統配置的最大鏈接跟蹤閾值,則此設置不起做用。 net.wireObjectCheck --用法:wireObjectCheck: boolean 默認值是true 爲true時,mongod或mongos實例驗證客戶端收到的全部請求,以防止客戶端將錯誤格式或無效的BSON插入到MongoDB數據庫中。 注意:對於具備高度子文檔嵌套的對象,net.wireObjectCheck對性能有輕微影響。 net.http.enabled --用法:enabled: boolean 默認值是false 啓用或禁用HTTP接口。 啓用接口可能會增長網絡暴露。 net.http.RESTInterfaceEnabled --用法:RESTInterfaceEnabled: boolean,默認爲false 即便http接口選項關閉,打開也會暴露http接口,會致使更多的不安全因素。不過開啓爲true能夠在 mongodb的web頁面訪問List all commands 頁面! net.unixDomainSocket.enabled --用法 unixDomainSocket.enabled: boolean 默認值是true 在UNIX域套接字上啓用或禁用偵聽。 net.unixDomainSocket.enabled僅適用於基於Unix的系統。 四、security 選項 security: keyFile: <string> clusterAuthMode: <string> authorization: <string> transitionToAuth: <boolean> javascriptEnabled: <boolean> redactClientLogData: <boolean> sasl: hostName: <string> serviceName: <string> saslauthdSocketPath: <string> enableEncryption: <boolean> encryptionCipherMode: <string> encryptionKeyFile: <string> kmip: keyIdentifier: <string> rotateMasterKey: <boolean> serverName: <string> port: <string> clientCertificateFile: <string> clientCertificatePassword: <string> serverCAFile: <string> ldap: servers: <string> bind: method: <string> saslMechanism: <string> queryUser: <string> queryPassword: <string> useOSDefaults: <boolean> transportSecurity: <string> timeoutMS: <int> userToDNMapping: <string> authz: queryTemplate: <string> security.keyFile --用法:keyFile: string 密鑰文件的路徑,該文件存儲MongoDB實例用於在分片集羣或副本集中彼此進行身份驗證的共享密鑰 keyFile意味着security.authorization! security.clusterAuthMode --用法: clusterAuthMode: string 默認值是keyFile 用於集羣身份驗證的身份驗證模式 security.authorization --用法:authorization: string 默認值是disabled 啓用或禁用基於角色的訪問控制(RBAC)以管理每一個用戶對數據庫資源和操做的訪問。 enabled: 用戶只能訪問已爲其授予了權限的數據庫資源和操做。 diabled: 用戶能夠訪問任何數據庫並執行任何操做 security.transitionToAuth --用法:transitionToAuth: boolean 默認值是false 3.4版本新的功能,容許mongod或mongos接受和建立到部署中的其餘mongod和mongos實例的已驗證和未驗證的鏈接 security.javascriptEnabled --用法:javascriptEnabled: boolean 默認值是true 啓用或禁用服務器端JavaScript執行,禁用時,不能使用執行服務器端執行JavaScript代碼的操做,例如$ where查詢運算符,mapReduce命令和db.collection.mapReduce()方法,group命令和db.collection.group()方法 。 五、setParameter 選項 設置MongoDB服務器參數中描述的MongoDB參數或參數 要在YAML配置文件中設置參數,請使用如下格式: setParameter: <parameter1>: <value1> <parameter2>: <value2> 例如,要在配置文件中指定enableLocalhostAuthBypass setParameter: enableLocalhostAuthBypass: false 六、operationProfiling 選項 operationProfiling: slowOpThresholdMs: <int> mode: <string> operationProfiling.slowOpThresholdMs --用法:slowOpThresholdMs: integer 默認值是100 數據庫概要分析器認爲查詢速度緩慢的閾值(以毫秒爲單位),MongoDB將全部慢查詢記錄到日誌中,即便數據庫分析器關閉 當分析器打開時,它將寫入system.profile集合 operationProfiling.mode --用法:mode: string 默認值是 off 數據庫概要分析的級別,它將有關操做性能的信息插入到system.profile集合中。它的值有off、slowOp、all 注意:數據庫分析可能會影響數據庫性能。 僅在仔細考慮後才啓用此選項 七、replication 選項 replication: oplogSizeMB: <int> replSetName: <string> secondaryIndexPrefetch: <string> enableMajorityReadConcern: <boolean> replication.oplogSizeMB --用法:oplogSizeMB: integer 複製操做日誌的最大大小(以兆字節爲單位),例如:oplog。mongod進程基於可用的最大空間量建立oplog 對64bit系統而言,oplog一般是可用磁盤空間的5%,一旦mongod第一次建立oplog,更改replication.oplogSizeMB選項將不會影響oplog的大小 replication.replSetName --用法: replSetName: string mongod所屬的副本集的名稱。 副本集中的全部主機必須具備相同的集名稱。若是應用程序鏈接到多個副本集,則每一個副本集應具備不一樣的名稱。 某些驅動程序按副本集名稱對副本集鏈接進行分組。 replication.secondaryIndexPrefetch --用法:secondaryIndexPrefetch: string 默認值是all 存儲引擎特定功能: replication.secondaryIndexPrefetch僅適用於mmapv1存儲引擎。 replication.enableMajorityReadConcern --用法: enableMajorityReadConcern: boolean 默認是false 啓用「多數」的讀取關注級別。 八、sharding 選項 sharding: clusterRole: <string> archiveMovedChunks: <boolean> sharding.clusterRole --用法:clusterRole: string mongodb實例在分片集羣中具備的角色。有2個值,以下: configsvr:將此實例做爲配置服務器啓動。 默認狀況下,實例在端口27019上啓動。 shardsvr: 將此實例做爲分片啓動。 默認狀況下,實例在端口27018上啓動。 sharding.archiveMovedChunks --用法: archiveMovedChunks:boolean 在塊遷移期間,分片不保存從分片遷移的文檔。 九、auditLog 選項 僅在MongoDB Enterprise中可用 auditLog: destination: <string> format: <string> path: <string> filter: <string> 還有不少其餘參數,這裏不一一介紹了!
不足之處,請多多指出!