mongodb温习

引言

Q: 为何会用到MongoDB? A: 业务需要

安装

# 拉取一下mongo:4 在 2022-02-09 这天,mongo:5 版本好像还是起不来
docker pull mongo:4
# 运行起来
docker run -itd --name mongo -p 27017:27017 mongo:4 --auth
# 进来改一下 admin 的密码
docker exec -it mongo mongo admin
# admin的密码改成 admin
db.createUser({ user:'admin',pwd:'admin',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 检验一下
db.auth('admin', 'admin')

使用体验与感受

MongoDB是一个以json为文档模型的文档数据库。相较于关系型数据库,使用上更加简单直观,体现在建模上自然,直观的方式来和数据库交互;快速开发和结构灵活,数据库交互风格偏向开发者,有完善的JSON-API,使你的业务开发代码量变得更少,弹性模式从容相应需求变化,分片架构支持海量数据和无缝扩容,复制集提供5个9的高可用。

索引是B-tree

B+树中的节点不存储数据,所有存储在叶子节点的数据导致查询时间复杂度固定为logn。 B-tree查询时间复杂度不是固定的,和key在树中的位置有关,最好是O(1)。 Mysql使用B+树,数据在叶子节点上。 每个查询都需要访问叶子节点, 而 MongoDB 使用 B-tree。 所有节点都有一个数据字段。 只要找到指定的索引,就可以访问。 毫无疑问,平均查询 比 Mysql 快 。

主从复制与异地灾备

官方文档:副本集数据同步

mongodb的副本集数据同步有 intial sync 初始全量同步 replication 增量同步

wiredTiger 存储引擎