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

相关文章
相关标签/搜索