MongoDB
2019-12-05 本文已影响0人
宋song一
环形队列存储,先进先出
下载地址
mongoose高级查询:.skip.limit.sort.select
MongoDB使用B-Tree
选择custom安装
特点:(三高)高并发,海量数据的高效率存储和访问,高可扩展性与高可用性
应用场景:社交、游戏、物流、物联网、直播
数据量大,读写操作频繁,价值较低的数据
考虑:
- 不需要复杂join支持
- 新应用,需求会变,数据模型无法确定,想快速迭代开发
- qps>2000
- 存储TB以上
- 应用要求存储的数据不丢失
- 99.999%高可用
- 地理位置查询,文本查询
数据格式灵活,数据字段扩展零消耗,一般情况下,读写性能略高于MySQL
从MongoDB 3.2开始,WiredTiger存储引擎开始作为默认的存储引擎,是压缩存储 要比mysql占用小
相对MySQL,成本更低(学习、开发、运维)
数据库,集合(table)、文档(row).文档格式可以不同
【Mongodb】事务
- Mongodb 4.0 支持副本集的多文档事务
- Mongodb 4.2 支持分片集群的多文档事务
单个Server不支持使用事务,所以要使用事务,需要搭建一个副本集/分片集群
另外需要说明是,单个文档操作是原子操作,而mongodb是文档型数据库,在单个文档上,可以嵌入对象/数组这种格式来维护数据的关系,而不应该使用多个集合来维护数据之间的关系。由于mongodb的这种特性,所以单个文档操作消除了很多需要事务的需求
〇、性能对比
插入性能,高于mysql
Mysql.8.0 与 MongoDB.4.2大数据量查询性能对比
- 百万级数据量性能测试对比
(1)从平均响应时间来看,查询条件较少的情况下MySQL占据优势,mongodb在查询条件越多的情况下,越占据优势,因为查询条件越多,筛选的数据会比较少,可以有效利用内存。但是优势不是太明显。
(2)从吞吐量上来看,mongodb占据优势,但是除了任务信息查询以外,其他类型查询的优势不是太明显 - 千万级数据量性能测试对比
(1)从平均响应时间来看,mongodb占据绝对优势。
(2)从吞吐量上来看,mongodb占据绝对优势。
(3)对于千万或者更大的数据量,应该是要分区或分片,同时考虑分区容错性。如下图,mongodb属于CP,同时满足一致性(C,Consistency)、分区容错性(P,Partition Tolerance)。MySQL属于CA,同时满足一致性(C,Consistency)、可用性(A, Availability)
一、启动与部署
MongoDB 4.2的下载安装配置
MongoDB4.0在windows10下的安装与服务配置教程详解
cmd命令行启动也可以:bin目录下:mongod --dbpath=..\data\db
二、查询
投影查询:1,显示。0,不显示
涵盖的查询(仅查询索引字段)
批量更新:{multi:true}
{justOne:true}
db.user.find({uid:{$mod:[2,0]}}) 查找uid为偶数的集合
三、索引
- 单字段索引
- 复合索引
- 地理空间索引
- 文本索引
- 哈希索引
- 执行计划:
.explain()
显示结果中winningPlan的stage内容,未使用索引显示‘COLLSCAN’,使用索引为‘FETCH'