MongoDB采用C++开发,是当前最火热的nosql数据库之一,可以在许多场合替代传统的关系型数据库。
MongoDB是一个面向集合、模式自由的文档型数据库,Mongo存储的数据是以BSON为单位(二进制化的JSON),Mongo内置了JavaScript解释器,所以可以使用类似JS的面向对象查询语法,媲美SQL。
MongoDB主要特点如下:
面向集合文档存储
模式自由:一个集合可以存储一个键值对的文档,也可以存储多个键值对的文档
动态查询:支持查询语句使用JSON参数
支持复制和恢复
支持高效二进制存储,包括大型食品、图片等
MongoDB使用场景:
可以替代大多数对关系性要求不高的数据存储,如私信功能
自动分片,适合高伸缩的场景
大数据、低价值数据的存储
Mongo的弱项:
高度依赖事务的系统
针对特定问题的BI数据库需要高度优化的查询方式
Mongo的版本号中3.4.2中第二个数4如果是偶数,代表稳定版,推荐使用。
32位版本的Mongo单个数据库实例最大大小为2G左右,而64位则为128T,所以推荐使用64位。
下载对应版本后下一步下一步即可
解压安装文件即可,启动方式同win
下载版本为:Linux 64-bit legacy x64
安装: tar -zxvf mongodb-linux-x86_64-4.0.6.tgz mv mongodb-linux-x86_64-4.0.6 /usr/local/mongodb vim /etc/profile # 只想在当前账户下,可编辑用户目录下的.bashprofile export PATH=/usr/local/mongodb/bin:$PATH 配置数据目录: mkdir -p /root/mongo/data # 创建数据目录 mkdir -p /root/mongo/logs # 创建日志目录 touch /root/mongo/logs/logs.log # 创建日志文件 chmod -R 777 /root/mongo/
服务端启动(进入mogo的bin目录) ./mongod # --dbpath="C:/data" 该参数用于指定mongo数据的存放位置 客户端连接: ./mongo
由于启动的可选配置属性太多,推荐使用配置文件启动,方便管理:
vim /etc/mongo.conf dbpath=/root/mongo/data/ logpath=/root/mongo/logs/logs.log logappend=true fork=true #守护进程运行,配置该行后,则不可使用 -f 启动参数 port=27017 启动: ./mongod --config /etc/mongo.conf 关闭: 直接关闭:CTRL+C,不要关闭ssh窗口直接退出(会出错) 后台启动关闭:在客户端使用 db.shutdownServer() 以服务形式启动关闭: sudo service mongod start sudo service mongod stop 如果是在阿里云安装后,外网需要连接还需要额外配置: 1 阿里云开放27017端口 2 默认情况下,阿里云只绑定了127.0.0.1本地地址,只能本地访问,需要在配置文件加上阿里云内网地址: bind_ip:127.0.0.1,阿里云内网地址 # 这里或者直接输入0.0.0.0 shell远程连接命令: mongo mydb --username user1 --host 192.168.99.100 --port 27017 --password
注意 mongodb默认端口是27018,如果没有设置数据目录,默认为/data/db
关闭命令:采用CTRL+C或者shutdownServer()命令或者kill -2 PID(-15也可以,但是-9会损坏数据)。
常见的mongodb可视化工具有官方的Compass,笔者推荐最新版的Navicat!
启动命令选项:
port=27017 #端口 dbpath #数据库存文件存放目录 logpath #日志文件存放路径 logappend=true #使用追加的方式写日志 fork=false #不以守护程序的方式启用,即不在后台运行 maxConns=100 #最大同时连接数 noauth=true #不启用验证 journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)
使用yum安装的mongodb已经注册为系统服务,直接支持开机启动。
如果是解压包安装的MongoDB需要在/etc/init.d目录下创建service脚本才能注册为服务,以实现开机启动。
MongoDB未正常关闭,可能会无法再次启动,可以删除data目录下的mongod.lock文件。
bsondump bson转换工具
mongodump 逻辑备份工具
mongorestore 逻辑恢复工具
mongoexport 数据导出工具
mongoimport 数据导入工具
mongofiles GridFS文件工具
mongooplog 日志复制工具
mongoperf 性能检查工具
mongos 分片路由工具
mongostat 状态监控工具
mongotop 读写监控工具
MongoDB数据逻辑结构:
MongoDB的数据主要由文档(Document)、集合(Collection)、数据库(Database)三部分组成,文档相当于关系数据中的一行数据,多个文档组成的一个集合相当于关系数据库中的表,多个集合逻辑上组织在一起,就相当于数据库。
数据库的命名:
数据库名不能是空字符串
数据库名不能包含空格,空格符,$等特殊字符
数据库名推荐全小写
数据库名最多64字节
MongoDB有一些特殊的数据库:
admin:类似root数据库,在admin数据库中添加的用户会自动继承所有的数据库的权限,一些特定的服务器端命令也只能从这个数据运行,比如列出所有数据库、关闭服务器等等
local:该数据库永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的配置信息。
MongoDB启动后,由实例和数据库组成,一般情况下,一个MongoDB服务包含一个实例与多个与之对应的数据库,特殊情况下,允许一个服务器上有多个实例和多个数据库。
Mongo默认的数据目录是/data/db,所有的数据文件都在此目录下,每个数据库都包含一个.ns文件和一些数据库文件。
Mongo内部有预分配空间的机制,始终保持额外的空间和空余的数据文件,可以有效避免数据暴增而带来的磁盘压力。数据不断增加时,Mongo会新分配文件来存储,每次分配的文件大小是上一个数据文件大小的两倍,每个数据文件最大为2G。
Mongo数据库中每个集合和每个索引都有对应的命名空间,这些命名空间的元数据都集中在*.ns文件中。命名空间最大长度为121字节,实际应用中小于100字节。
3.2 MongoDB集合
集合就是一组文档,类似关系型数据库中的表。集合是无模式的,也就是说集合里文档是各式各样的,不会像关系型数据库那样规定表的字段结构。
集合命名规范:
不能使空字符串""
不能含有\\0,即空字符串,这个字符表示集合的结尾
不能以system.开头,这时系统集合保留的前缀
不推荐使用保留字$,因为某些系统生成的集合包含该字符
集合中还能包含子集合,推荐使用.
字符分开命名表示子集合。比如有一个项目集合project,含有子集合员工集合,可以命名为project.member
3.3 MongoDB文档
文档中的键类似于关系型数据库的字段。
命名规范:
空格符(\\0)在键中表示键的结尾,所以键中不能包含空格符
不建议包含$和.
区分大小写,区分键值类型
推荐不要以_
开头
键不能重复
文档的特点:
每个文档都有一个唯一的键"_id",作用类似mysql中的id主键
文档中的键值对是有序的,前后顺序不同就是不同的文档
文档中的键值对,值可以是字符串、数字、日期等各种数据类型
单个文档存储大小最大是16M(因为内存有限,不排除未来官方扩大范围)
MongoDB在JSON数据类型基础上做了一些额外扩展,称之为BASON,常见数据类型有:
数据类型 | 文档表示方式 | 说明 |
---|---|---|
null | {"key":null} | 空或者不存在的字段 |
布尔 | {"x": true} | 值有true和false两种 |
32位整数 | {"key": 8} | Mongo会存储32位整数,在shell中显示会转换为64位浮点数 |
64位整数 | {"key": {"floatApprox": 8}} | shell不可用,一般使用特殊的内嵌文档表示64位整数 |
64位浮点数 | {"x": 12.31} 或者 {"x":12} | |
字符串 | {"x":"hello"} | |
对象id | {"x":ObjectId()} | 对象id是文档的12字节唯一ID |
日期 | {"x": new Date()} |
其他数据类型支持:正则表达式、JS代码、二进制数据、undefined未定义、数组以及各种内嵌的文档。
MongoDB3.4添加了新数据类型Decimal128,用于存储最多32位小数,与浮点数不同的是,该数值存储的是实际数据,例如9.99,在内存中就是9.99,而浮点数的9.99类似:9.9900000000000000213....所以金额操作一般使用该数据类型,可以避免精度缺失。
ObjectId:每个文档都有一个属性,为_id,保证每个文档的唯一性,可以自己去设置_id插入文档,如果没有提供,那么MongoDB为每个文档提供了一个独特的_id,类型为objectID,objectID是一个12字节的十六进制数:
前4个字节为当前时间戳
接下来3个字节的机器ID
接下来的2个字节中MongoDB的服务进程id
最后3个字节是简单的增量值
MongoDB的日期类型需要注意的地方是:日期在Mongo中以标准纪元开始的毫秒数形式存储,忽略了时区,例如中国是东八区,默认情况下,把当前时间存入Mongo,会少8个小时。在Java中,Date的时间是23:00,到了Mongo中使用Date会是15:00。当然大部分Mongo驱动在内部已经帮我们处理好了这部分,可以直接忽略时区问题。
本文地址:https://www.stayed.cn/item/382
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我