MongoDB入门介绍

2022-12-03 11:40:57 浏览数 (2)

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();

0 人点赞