MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。 在高負載的狀況下,添加更多的節點,能夠保證服務器性能。 MongoDB 旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於JSON對象。字段值能夠包含其餘文檔,數組及文檔數組。
MongoDB 是一個面向文檔存儲的數據庫,操做起來比較簡單和容易。 你能夠在MongoDB記錄中設置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現更快的排序。 你能夠經過本地或者網絡建立數據鏡像,這使得MongoDB有更強的擴展性。 若是負載的增長(須要更多的存儲空間和更強的處理能力) ,它能夠分佈在計算機網絡中的其餘節點上這就是所謂的分片。 Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。 MongoDb 使用update()命令能夠實現替換完成的文檔(數據)或者一些指定的數據字段 。 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安裝簡單。
MongoDB能夠爲Web應用提供可擴展的高性能數據存儲解決方案。MongoDB主要適用領域有網站數據、分佈式場景、數據緩存和JSON文件格式存儲。適用大數據量、高併發、若事務的互聯網應用,其內置的水平擴展機制提供了從幾百萬到十億級別的數據處理能力,能夠很好地知足Web2.0和移動互聯網應用數據存儲的要求。
html
1、mongodb 配置文件解說(以4.0爲標準說明,使用centos7版本)linux
/etc/mongod.confmongodb
systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # Where and how to store data. # 數據庫文件位置 storage: dbPath: /var/lib/mongo # 這使 日記功能成爲可能。日記功能可確保單實例寫入持久性。mongod默認狀況下,64位版本的啓用日記功能。所以,該設置多是多餘的。 journal: enabled: true # engine: # 後面的版本中可能會再也不使用mmapv1方式 (在MongoDB 4.0中不推薦使用) # mmapv1: # wiredTiger: # how the process runs processManagement: # 是否以守護進程方式運行 fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo # network interfaces net: port: 27017 bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. # 如下是複製和分片配置 # 爲副本集啓用身份驗證,請添加如下keyFile選項: # security: # keyFile : / srv / mongodb / keyfile #operationProfiling: # 要將配置服務器部署爲副本集,配置服務器必須運行WiredTiger存儲引擎。Initiate副本集和添加成員。 # 若是做爲副本集運行,initiate則分片副本集和添加成員。 # configDB : csRS / 10.8.0.12:27001 # clusterRole : shardsvr # replication: # 複製配置 # replSetName : set0 #sharding: ## Enterprise-Only Options #auditLog: #snmp:
詳情請參考:數據庫
https://docs.mongodb.com/manual/administration/configuration/編程
mongodb 優化推薦json
一、內核參數優化 vm.swappiness 若是您的主機運行內核版本3.5或更高版本,或 RHEL / CentOS內核2.6.32-303 或更高版本,則將此值設置爲0能夠禁用交換。將此設置爲1。 設置0告訴內核只交換以免內存不足的問題。 設置100告訴它積極地交換到磁盤。 二、關閉atime包含數據庫文件的存儲卷。 三、 根據ulimit引用中的建議,設置文件描述符限制-n和用戶進程限制(ulimit)-u,大於20,000 。在大量使用時,低ulimit將影響MongoDB,而且可能產生錯誤並致使與MongoDB進程的鏈接失敗和服務丟失。 cat /etc/security/limits.conf open files (-n) 65535 max user processes (-u) 65535 四、透明大頁面(THP)是一種Linux內存管理系統,經過使用更大的內存頁面,能夠減小具備大量內存的計算機上的Translation Lookaside Buffer(TLB)查找的開銷。 可是,數據庫工做負載一般在THP上表現不佳,由於它們每每具備稀疏而不是連續的內存訪問模式。您應該在Linux機器上禁用THP以確保使用MongoDB得到最佳性能。 建立一個文件 /etc/init.d/disable-transparent-hugepages: #!/bin/bash ### BEGIN INIT INFO # Provides: disable-transparent-hugepages # Required-Start: $local_fs # Required-Stop: # X-Start-Before: mongod mongodb-mms-automation-agent # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Disable Linux transparent huge pages # Description: Disable Linux transparent huge pages, to improve # database performance. ### END INIT INFO case $1 in start) if [ -d /sys/kernel/mm/transparent_hugepage ]; then thp_path=/sys/kernel/mm/transparent_hugepage elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then thp_path=/sys/kernel/mm/redhat_transparent_hugepage else return 0 fi echo 'never' > ${thp_path}/enabled echo 'never' > ${thp_path}/defrag re='^[0-1]+$' if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]] then # RHEL 7 echo 0 > ${thp_path}/khugepaged/defrag echo never > /sys/kernel/mm/transparent_hugepage/enabled else # RHEL 6 echo 'no' > ${thp_path}/khugepaged/defrag fi unset re unset thp_path ;; esac 五、在BIOS中禁用NUMA。若是沒法作到這一點,請參閱 NUMA硬件上的MongoDB。 若是你運行在numa機器上,建議禁用numa行爲,以免性能問題。 numactl --interleave = all <path> <options> 這<path>是您正在啓動的程序的路徑,是<options> 傳遞給程序的任何可選參數。 例如: numactl --interleave all mongod -f /etc/mongod.conf 在Linux上運行MongoDB時,應使用如下命令之一在 設置中禁用區域回收sysctl: echo 0 | sudo tee / proc / sys / vm / zone_reclaim_mode or sudo sysctl -w vm.zone_reclaim_mode = 0 要徹底禁用NUMA行爲,您必須執行這兩個操做。 六、若是您沒有使用默認的MongoDB目錄路徑或端口,請爲MongoDB配置SELinux 。(若是關閉selinux 請忽略)
請參考:centos
https://docs.mongodb.com/manual/administration/production-notes/#prod-notes-linux-file-system數組
MongoDB 在 bin 目錄下提供了一系列有用的工具,這些工具提供了 MongoDB 在運維管理上 的方便。緩存
工具 | 描述 |
---|---|
mongosniff | mongodb監測工具,做用相似於 tcpdump |
mongodump | MongoDB數據備份工具 |
mongoimport | Mongodb數據導入工具 |
mongoexport | Mongodb數據導出工具 |
bsondump | 將 bson 格式的文件轉儲爲 json 格式的數據 |
mongoperf | |
mongorestore | MongoDB數據恢復工具 |
mongod.exe | MongoDB服務啓動工具 |
mongostat | mongodb自帶的狀態檢測工具 |
mongofiles | GridFS 管理工具,可實現二制文件的存取 |
mongooplog | |
mongotop | 跟蹤一個MongoDB的實例,查看哪些大量的時間花費在讀取和寫入數據 |
mongos | 分片路由,若是使用了 sharding 功能,則應用程序鏈接的是 mongos 而不是 mongod |
mongo | 客戶端命令行工具,其實也是一個 js 解釋器,支持 js 語法 |
參考:bash
http://www.mongodb.org.cn/manual/
2、mongodb 的 logrotate日誌切割回滾
mongo logRotate 命令方法
mongo 命令進入mongo 命令行模式(默認端口爲:27017)
> use admin
switched to db admin
> db.runCommand({logRotate:1})
{ "ok" : 1 }
>
bye
cat /etc/logrotate.d/mongodb /var/log/mongodb/mongod.log { daily rotate 7 compress dateext missingok notifempty sharedscripts copytruncate postrotate /usr/bin/kill -SIGUSR1 `cat /var/lib/mongo/mongod.lock 2 > /dev/null` 2 > /dev/null || true endscript }
logrotate -vf /etc/logrotate.conf
ls /var/log/mongodb
mongod.log mongod.log.2019-04-16T23-44-00 mongod.log-20190417.gz