MongoDB 数据库定位

  1. OLTP(Online Transaction Processing)联机 事务处理。
  2. OLAP(On-Line Analytical Processing)联机 分析处理。

OLTP 指手机应用、网页应用,有交互式的。需求数 据库能够提供毫秒级的响应。
OLAP 指可以在晚上跑一个批,做分析处理,跑完以 后把结果写到表里面,第二天来拿结果。

OLTP 和 OLAP 最大的区别就是时效性的区别。

MongoDB 是 OLTP 型的数据库,从 MongoDB 4.0 开始完全支持跟交易相关的强事务。

MongoDB 优点

第一,横向扩展能力,数据量或并发量增加时候架构 可以自动扩展。MongoDB 是原生的分布式数据库, 通过分片技术,可以做到 TB 甚至 PB 级的数据量, 以及数千数万数十万到百万级的并发,或者是连接数等等。MySQL 就需要一些特定的分库分表,或者第三方的解决方案。

第二,灵活模型,适合迭代开发,数据模型多变场景。现在的开发都是讲究快速迭代,往往在第一个版本出来的时候,需求是不完整的,这个时候有一个比较灵活的、不固定结构的数据库,在开发时间上会节省非常多。

第三,JSON 数据结构,适合微服务/REST API。 REST API 的后面其实都是我们现在用的都是一种 REST 或者 JSON 的数据结构,而 MongoDB 是一 种非常原生的支持。

MongoDB 选型考量

基于技术需求

数据量

第一个指标:数据量。假设单表里面要保存的处理数据超过亿或者 10 亿的级别,而且使用挺频繁,这个时候就可以考虑使用 MongoDB。这种场景下如果用 MySQL 做分库分表,效率、稳定性、可靠性肯定没法跟 MongoDB 相比。

数据结构模型不确定,或者明确会多变

第二个指标,数据结构模型不确定,或者明确会多变。比如迭代开发的场景下,MongoDB 允许过程中快速迭代,不需要去修改它的 Schema,继续可以支持你的业务。

高并发读写

第三个指标,高并发读写,MongoDB 通过分片直 接支持。比如线上应用,网上可能是有很大很多的 用户一起使用,并发性会非常高,这个时候考虑到 MongoDB 的分布式分片集群,可以支撑非常大的并 发。基于单机的,比如说 Oracle、MySQL、SQL Server 可能都会有很大的瓶颈。

其它

跨地区集 群、地理位置查询、轻松支持异构数据与大宽表做海 量数据的分析, MongoDB 都是非常明显的优势。

MongoDB

关系型数据库

亿级以上数据量

通过分片支持

分库分表

数据结构模型不确定,或者明确会多变

JSON 动态模型

Entity Key/Value表,关联查询 比较痛苦

高并发读写

通过分片直接支持

需要优化

跨地区集群

zone sharding

需要定制方案

地理位置查询

比较完整的地理位置

PG还可以,其他数据库略麻烦

异构数据

轻松支持

使用EKV属性表

大宽表

轻松支持

性能受限

基于场景

基于场景选择 MongoDB 比较常见的有:移动/小程序 APP、电商、内容管理、物联网、SaaS 应用、主机分流、 实时分析、数据中台等。

MongoDB 选型_数据库


MongoDB 选型_数据库_02

实时分析

场景的特点:

  • 个性化、推荐系统、标签等场景需要对所有用户进 行海量计算,效率很低且数据不实时。
  • 采用实时分析可以针对性的分析,并且数据实时。
  • 要求快速计算,秒级响应。
  • 数据库系统需能够支撑大量数据,及快速数据聚合 分析能力。

MongoDB 能力:

  • 使用 MongoDB 聚合框架,实现统计分析功能。
  • 使用 MongoDB 的灵活结构存储中间结果。
  • 满足大多数简单实时统计分析场景。

电商

电商场景的特点是:商品信息特别多不好管理,因为 不同的商品有非常不同的属性,大家去过淘宝京东就 知道了,信息是包罗万象。数据库模式设计困难,当 并发访问量大的时候,压力也是非常大。

  • 商品信息包罗万象。
  • 商品的属性不同品类差异很大。
  • 数据库模式设计困难。
  • 并发访问量大,特别是促销。

MongoDB 选型考量总结:

  • JSON 模型无需固定格式,可以记录不同商品属性。
  • 可变模型适合迭代。
  • 并发性能保证。
  • 京东商城 / 小红书 / 思科。

MongoDB 什么时候不太适用

  • MongoDB 模型设计不建议太多分表设计,关联能 力较弱。
  • 传统数据仓库:建立各种维度表,然后使用大量关 联进行分析。
  • 大型 ERP 软件,一级数据对象数量较多(超过数 十数百),必须依赖于各种关联。
  • 数据结构模型非常成熟固定,并且数据量不大,如 财务系统。MongoDB 的弹性模型 和分布式没有意义。
  • 团队没有 MongoDB 能力,也没有时间让工程师 学习新技术。

— END —