一、MongoDB简介
- MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品的一种,是最像关系型数据库(MySQL)的非关系型数据库。
- 它支持的数据结构非常松散,是一种类似于Json的格式叫BSON,所以他既可以存储比较复杂的数据类型,又相当的灵活。
- MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于Json对象。即一个文档就是一个对象。字段的数据类型是是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。
二、SQL和MongoDB对比
SQL术语 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/ 文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
三、MongoDB的特点
1. 高性能
- MongoDB提供高性能的数据持久性。特别是对嵌入式数据模型的支持减少了数据库系统上的I/O活动。
- 索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。(文本索引解决搜索的需求,TTL索引解决历史数据自动过期的需求、地理位置索引可以用于构建各种O2O应用)
- mmapv1、wiredtiger、mongorocks(rocksdb)、in-memory等多引擎支持满足各种场景需求。
- Gridfs解决文件存储需求。
2. 高可用性
- MongoDB的复制工具称为副本集,它可提供自动故障转移和数据冗余。
3. 高扩展性
- MongoDB提供了水平扩展性作为其核心功能的一部分。
- 分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展)
- 从3.4开始,MongoDB支持基于片键创建数据区域。在一个平衡的集群中,MongoDB将一个区域所覆盖的读写只定向到该区域内的那些片。
4. 丰富的查询支持
- MongoDB支持丰富的查询语言,支持读和写操作(CRUD),比如数据聚合、文本搜索和地理空间查询等。
5. 其他特点
- 如无模式(动态模式)、灵活的文档模型
四、业务应用场景
传统的关系型数据库(如MySQL),在数据操作的 “三高” 需求及以及应对web2.0的网站需求面前,显得力不从心。解释 "三高"需求:
- 对数据库高并发读写的需求。
- 对海量数据高效存储和访问的需求。
- 对数据库高扩展性和高可用性的需求。
而MongoDB可应对"三高"的需求。
具体的应用场景如:
- 社交场景,使用MongoDB存储用户信息,以及用户发表的盆友圈信息,通过地理位置索引实现附近的人、地点等功能。
- 游戏场景,使用MongoDB存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。
- 物流场景,使用MongoDB存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单的所有变更读取出来。
- 物联网场景,使用MongoDB存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
- 视频直播,使用MongoDB存储用户信息,点赞互动信息。