MongoDB介绍
Mongodb是一个高性能、开源、无模式的文档型数据库,使用C 开发,是当前Nosql数据库产品中最热门的一种。这 里说到nosql数据库,就简单描述一下什么是nosql。nosql(not only sql非关系型数据库)的主要特点是非关系型的、分布式、开源的、水平扩展的。nosql的原始目的是为了大规模web应用,通常应用如模式自由、支持简单复制、简单的API、最终的一致性和大容量数据等。
nosql的主要解决三个需求:
- 对数据库高并发读写的需求,往往要达到每秒上万次读写请求。
- 对海量数据的高效率存储和访问的需求,大型社交网站,一个月就能产生2.5亿条用户数据。
- 对数据库的高可扩展性和高可用的需求。
MongoDB特点
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
- 面向集合存储,易存储对象类型的数据。
- 模式自由。
- 支持动态查询。
- 支持完全索引,包含内部对象。
- 支持查询。
- 支持复制和故障恢复。
- 使用高效的二进制数据存储,包括大型对象(如视频等)。
- 自动处理碎片,以支持云计算层次的扩展性。
- 支持 Golang,RUBY,PYTHON,JAVA,C ,PHP,C#等多种语言。
- 文件存储格式为BSON(一种JSON的扩展)。
- 可通过网络访问。
MongoDB和MySQL的区别
如下图形象的介绍下MongoDB和MySQL的区别
MongoDB适用场合
网站数据、缓存、大尺寸、低价值的数据,高伸缩型的场景,用于对象以及json数据的存储。
适用场景如下:
- 表结构不明确且数据不断变大 MongoDB是非结构化文档数据库,扩展字段很容易且不会影响原有数据。内容管理或者博客平台等,例如圈子系统,存储用户评论之类的。
- 更高的写入负载 MongoDB侧重高数据写入的性能,而非事务安全,适合业务系统中有大量“低价值”数据的场景。本身存的就是json格式数据。例如做日志系统。
- 数据量很大或者将来会变得很大 Mysql单表数据量达到5-10G时会出现明显的性能降级,需要做数据的水平和垂直拆分、库的拆分完成扩展,MongoDB内建了sharding、很多数据分片的特性,容易水平扩展,比较好的适应大数据量增长的需求。
- 高可用性 自带高可用,自动主从切换(副本集)
不适用场景如下:
- MongoDB不支持事务操作,需要用到事务的应用建议不用MongoDB。
- MongoDB目前不支持join操作,需要复杂查询的应用也不建议使用MongoDB。
Docker搭建Mongodb
获取docker镜像
代码语言:javascript复制docker pull mongo
创建mongodb容器
代码语言:javascript复制docker run --name my-mongo1 -v /data/mongo_local_data:/data/db --rm -p 27017:27017 -d mongo --auth
进入容器设置用户
代码语言:javascript复制docker exec -it 容器id /bin/bash
mongo
use admin
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]}) //创建用户,此用户创建成功,则后续操作都需要用户认证
exit
或者直接进入admin
代码语言:javascript复制docker exec -it ly-mongo mongo admin
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]}) //创建用户,此用户创建成功,则后续操作都需要用户认证
exit
mongo shell
mongo shell是MongoDB的交互式JavaScript接口。您可以使用mongo shell查询和更新数据以及执行管理操作。mongo shell作为MongoDB Server安装的一部分包含在内。
查看mongodb shell的执行路径。
代码语言:javascript复制/usr/local/mongodb/bin/
启动mongo
代码语言:javascript复制./mongod
mongo的shell
代码语言:javascript复制./mongo
查看mongo内存
代码语言:javascript复制db.serverStatus().mem
释放硬盘
代码语言:javascript复制db.repairDatabase()
删除集合
代码语言:javascript复制db.api_info_models.drop()
设置内存
代码语言:javascript复制use admin
db.adminCommand({setParameter: 1, internalQueryExecMaxBlockingSortBytes: 52428800})
增加索引
代码语言:javascript复制db.api_info_models.createIndex({"id":1})
db.monkey_info_models.createIndex({"create_time": -1});
db.monkey_info_models.getIndexes();