开发者学堂课程【MongoDB精讲课程(上):应用场景】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/726/detail/12948
应用场景
内容介绍:
一、业务应用场景
一、业务应用场景
传统的关系型数据库(如 MySQL) ,在数据操作的“三高“需求以及应对 Web2.0的网站需求面前,显得力不从心。
1.解释:”三高”需求
High performance 对数据库高并发读写的需求。对于高并发的理解,举例:双十一的淘宝,上亿的用户在淘宝上同时下单,这对于数据库是一个很大压力,传统的关系型 Mysql 的数据库,是不能完成相关的要求或是相应对的代价比较高。此时就要使用 Nosql 的 数据库,MongoDB 就是一个很典型的数据库。
Huge Storage -对海量数据的高效率存储和访问的需求。这是普通 MySQL 很难达到的,海量就是很多的数据,比如朋友圈,微信数据,每天有上亿的用户在使用,所产生的数据也是 TB 或是 PB 级别的。若此时使用 MySQL 存储数据就难以高效的去存储,这就要使用 NoSQL 的数据库,比如 MongoDB。
High Salbiiry && High Avliability 对数据库的高可扩展性和高可用性的需求。比如传统的关系型数据库 MySQL,在使用的之前所用的表和表、列和列的关系都是固定的,这就难以扩展,或是扩展的代价很高。而 MongoDB 是松散型的数据库,不需要在一开始的时候把每一列的关系都确定好,所以当它不确定格式的时候,它的扩展性非常好。高可用的理解会在后续的讲述的集群和安全性的时候中会详细讲解 MongoDB 的好处。
2.MongoDB 可应对“三高"需求。
具体的应用场景如下:
1)社交场景,例如微信朋友圈,地理位置,这些都是海量的数据,这就是三高的范围内。使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人地点等功能。
2)游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储。方便查询、高效率存储和访问。游戏对延迟有很高的要求,在砍怪、升级的过程中会产生大量经验值的情况,如果采用 MySQL 存储数据,它的时效性不会很高。所以 MongoDB 它可以轻松实现高效率的存储。
3)物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌入数组形式来存储,一次查询就能将订单所有的变更读收出来。它就是一个大数据,比如美团上的位置实时是往上报的,用户可以详细看到外卖员的距离,实时更新数据会产生大量数据,此时用 MongoDB 来存储会更好,而且它本身还支持内嵌的形式。相比较而言会比 Mysql 这种关联性数据库更加的简便的去查询所关联的数据。
4) 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇根的日志信息,并对这些信息进行多维度的分析。它所接入的设备都是数以亿级,它产生的数据也是非常的大,汇报的日志都是实时的,它的数据量也是很大的。
5)视频直播,使用 MongoDB 存储用户信息,点赞互动信息等。
3.这些应用场置中,数据操作方面的共同特点
(1)数据量大
(2)写入操作频繁,(读写都很频繁)比如游戏场景,物流场景都是写入很频繁的操作
(3)价值较低的数据,对事务性的要求不高,可以看到上面的讲述没有太多金钱的涉及。同时它也存在缺点,若没有缺点的情况下,Mysql 早就被取代了。缺点在于对于事务性的要求不高,举例像银行转账,这种强事务就不太适合MongoDB,这时候就还是使用关系型的数据库比较合适。
对于这样的数据,更适合使用 MongoDB 来实现数据的存储
4.什么时候选择 MongoDB?
(1)应用不需要事务以及复杂 join 支持
新应用,需求会变,数据模型无法确定,想快速迭代开发。它的数据模型是松散的,不需要一开始的时候就确定数据模型它的扩展性很高。
应用需要2000-3000以上的读写 QPS(更高也可以)
应用需要 TB 甚至 PB 级别数据存储,传统型数据库使用一个是比较麻烦,使用 MySQL 的维护成本比较高,这就要选择 MongoDB 来取代它。
(2)应用发展迅速,选能快速水平扩展
(3)应用要求存储的数据不丢失
(4)应用要求99.999%高可用
(5)应用需要大量的地理位置查询、文本查询
6.思考:如果用 MySQL?
答:相对 MySQL 来说,它的可以以更低的成本解决问题(包括学习、开发、运维等成本)。以上的需求,用 Mysql都是可以解决的。但相对来说 MySQL 的成本很高;在处理一些大数据的时候,要优化做的非常好才适合实现,但MongoDB 的先天条件就决定了它会在高并发、数据量大的情况下效率更高,所以就可以相比较选择 MongoDB 来去实现。