摘要:MongoDB 是一个基于分布式文件存储的数据库。
目录
[TOC]
MongDB 文档数据库
MongoDB 是一个基于分布式文件存储的数据库。
-
旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
-
是一个开源文档型 NoSQL 数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的。
- 支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。使用类似 JSON 的文档模型存储数据,这使得数据存储变得非常灵活。
- 最大的特点是支持的查询语言非常强大,语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
应用场景
传统的关系型数据库(如MySQL),在数据操作的三高需求以及应对Web2.0的网站需求面前,显得力不从心,而 MongoDB可应对“三高“需求:
-
High performance:对数据库高并发读写的需求
-
Huge Storage:对海量数据的高效率存储和访问的需求
-
High Scalability && High Availability:对数据库的高可扩展性和高可用性的需求
具体应用场景:
- 社交场景,存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
- 游戏场景,存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。
- 物流场景,存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来
- 物联网场景,存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
- 视频直播,存储用户信息、点赞互动信息等。
这些应用场景中,数据操作方面的共同特点是:对于这样的数据,更适合使用 MongoDB来实现数据的存储。
- 数据量大
- 写入操作频繁(读写都很频繁)
- 价值较低的数据,对事务性要求不高
什么时候选择MongoDB:
- 应用不需要事务及复杂join支持
- 新应用,需求会变,数据模型无法确定,想快速迭代开发
- 应用需要2000-3000以上的读写QPS(更高也可以)
- 应用需要TB甚至PB级别数据存储
- 应用要求存储的数据不丢失
- 应用需要99.999%高可用
- 应用需要大量的地理位置查询、文本查
相对MySQL,在以上以用场景可以以更低的成本解决问题(包括学习、开发、运维等成本)