MongoDB 是一个开源、高性能、无模式的文档型数据库,是 NoSQL 数据库产品中的一种,被设计用于简化开发和方便扩展。它以 BSON(Binary-JSON)文档的格式存储数据,支持的数据结构非常松散,类似于 JSON,既可以存储复杂数据类型,又具有很高的灵活性。
体系结构
数据模型
MongoDB 的最小存储单位是文档对象,文档对象对应于关系型数据库的行。BSON 是一种类 JSON 的二进制形式存储格式,支持内嵌的文档对象和数组对象,还包含一些 JSON 没有的数据类型,如 Date 和 BinData 类型。BSON 具有轻量性、可遍历性、高效性的特点,但空间利用率不太理想。
特点
高性能:支持嵌入式数据模型,减少 I/O 活动,索引支持更快的查询,还支持多种存储引擎,如 wiredtiger、in - memory 等,以满足各种场景需求。
高可用性:通过副本集提供自动故障转移和数据冗余,确保数据的高可用性。
高扩展性:分片将数据分布在一组集群的机器上,从 3.4 开始,支持基于片键创建数据区域,实现水平可扩展性。
丰富的查询支持:支持丰富的查询语言,包括 CRUD 操作、数据聚合、文本搜索和地理空间查询等。
应用场景
社交场景:存储用户信息、朋友圈信息等,可通过地理位置索引实现附近的人、地点等功能。
游戏场景:存储游戏用户信息、装备、积分等,以内嵌文档的形式存储,方便查询和更新。
物流场景:存储订单信息,订单状态的变更以嵌入数组的形式存储,一次查询就能读取所有变更。
物联网场景:存储智能设备信息和设备汇报的日志信息,并进行多维度分析,可通过分片集群实例实现性能和存储空间的无限扩展。
视频直播:存储用户信息、点赞互动信息等。
MongoDB 的适用情况
应用不需要事务及复杂 join 支持。
新应用,需求会变,数据模型无法确定,想快速迭代开发。
应用需要 2000 - 3000 以上的读写 QPS。
应用需要 TB 甚至 PB 级别数据存储。
应用发展迅速,需要能快速水平扩展。
应用要求存储的数据不丢失。
应用需要 99.999% 高可用。
应用需要大量的地理位置查询、文本查询。