1、mongodb4.0簡介與使用

概 述

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

相關文章
相關標籤/搜索