MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,是一种文档型的NoSQL数据库,因此可以存储比较复杂的数据类型。
Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引
MongoDB的体系结构与安装
MongoDB的体系结构
MongoDB是一个可移植的数据库,它在流行的每一个平台上都可以使用,即所谓的跨平台性,在不同的操作系统上虽然略有差别,但是从整体架构上来看,MongoDB在不同的平台上是一样的,如数据逻辑结构和数据存储等等。
一个运行着的MongoDB数据库就可以看成是一个MongoDB Server,该Server由实例和数据库组成,在一般情况下,一个MongoDB Server机器上包含一个实例或者多个与之对应的数据库,但是在特殊情况下,如硬件投入成本或者特殊的应用需求,也允许一个Server机器上可以有多个实例或者多个数据库。
MongoDB中一系列物理文件(数据文件、日志文件等)的集合与之对应的逻辑结构(集合、文档等)被称之为数据库,简单的说,就是数据库是由一系列与磁盘有关系的物理文件的组成。
- 逻辑存储结构
MongoDB的逻辑结构是一种层次结构,主要由:文档(Document)、集合(Collection)、数据库(database)这三部分组成,逻辑结构是面向用户的,用户使用MongoDB开发应用程序使用的就是逻辑结构。- MongoDB的文档(Document),相当于关系数据库中的一行记录。
- 多个文档组成一个集合(Collection),相当于关系数据库的表。
- 多个集合(Collection),扩及上组织在一起,就是数据库(database)。
- 一个MongoDB实例支持多个数据库(database)。
- 文档(Document)、集合(Collection)、数据库(Database)的层次结构如下图:
- 物理存储结构
- 命名空间文件:后缀是ns,文件大小:16M。
- 数据文件:后缀是0、1、2…,而.0文件16M,.1文件32M,往后则翻倍,最大值为2G,这样可以让小数据库不浪费太多的空间,大数据库能够使用磁盘上连续的空间。通过牺牲空间,换取时间。
- 日志文件:注意存储的位置可能不一样
存储在操作系统中
系统日志文件:记录系统启动日志、警告信息等等
journal日志文件:重做日志,即:redo日志,用于恢复
存储在集合(collection)中
oplog复制操作日志(只有主从复制才有)
慢查询日志(需要配置):一般生产中大于200毫秒
MongoDB的安装配置
-
关闭防火墙
systemctl stop firewalld.service systemctl disable firewalld.service systemctl status firewalld.service
-
安装需要的rpm包
挂载光盘mount /dev/cdrom /cdrom/
创建yum源,文件:/etc/yum.repos.d/rhel-media.repo
[media] name=Red Hat Enterprise Linux 7.4 baseurl=file:///cdrom enabled=1 gpgcheck=1 gpgkey=file:///cdrom/RPM-GPG-KEY-redhat-release
安装net-snmp
yum install -y net-snmp*
安装cyrus
yum install -y cyrus*
将mongodb安装到/root/training的目录
tar -zxvf mongodb-linux-x86_64-enterprise-rhel70-3.4.10.tgz -C ~/training/
启动MongoDB
正确的启动方式:mongod --dbpath /data/db &
检查后台进程:
使用mongo shell
启动mongo shell
可选参数:
或
启动配置文件.mongorc.js
当启动的时候,mongo检查用户HOME目录下的一个JavaScript文件.mongorc.js。如果找到,mongo在首次显示提示信息前解析.mongorc.js的内容。如果你使用shell执行一个JavaScript文件或计算表达式,要么通过在命令行使用–eval选项或者指定一个.js文件给mongo,mongo会在完成JavaScript的处理后读取.mongorc.js文件。你可以使用–norc选项来阻止加载.mongorc.js。
- 实例一:使用自定义提示信息
-
创建与当前会话发出操作的数量提示,定义如下变量:
cmdCount = 1; prompt = function() { return "mongo " + (cmdCount++) + "> "; }
效果:
-
在mongo shell中显示数据库名和主机名:
host = db.serverStatus().host; cmdCount = 1; prompt = function() { return db+"@"+host+" " + (cmdCount++) + "> "; }
效果:
-
mongo shell的基本操作
- 显示当前数据库名称:db,将返回test数据库,这是默认的数据库
- 切换数据库:use <数据库名称>
- 查看所有的可用数据库:show dbs 或者 show database
mongo shell中的数据类型
日期类型:date
我们可以使用不同的方式来创建一个date型的数据:
- Date():表示当前时间,插入的是一个字符串类型
- new Date():插入的是一个isodate类型,表示格林尼治标准时间
- ISODate():类似new Date()
ObjectId
MongoDB中我们经常会接触到一个自动生成的字段:”_id”,类型为ObjectId。
之前我们使用MySQL等关系型数据库时,主键都是设置成自增的。但在分布式环境下,这种方法就不可行了,会产生冲突。为此,MongoDB采用了一个称之为ObjectId的类型来做主键。ObjectId是一个12字节的 BSON类型字符串。按照字节顺序,依次代表:
1. 前4个字节表示时间戳
2. 接下来的3个字节是机器标识码
3. 紧接的两个字节由进程id组成(PID)
4. 最后三个字节是随机数。
NumberLong
通常情况下mongo shell将所有的数据当作浮点值对待。mongo shell提供NumberLong()包装类处理64位整形数据。
NumberInt
mongo shell中提供NumberInt()构造方法表示32位整形数据。