1、为什么要NoSQL
关系型数据库难以克服的问题
- High performance 高并发读写
- Huge Storge 海量数据的高效率存储于访问
- High Scalability && High Availability 高可扩展性和高可用性
关系型数据库的约束
- 数据库事务一致性需求
- 数据库的写实时性和读实时性
- 对复杂的 sql查询,特别是多表关联查询的需求
Nosql的特点
优点
- 处理超大量的数据
- 运行在便宜的PC服务器集群上
- 打破性能瓶颈
- 操作简单
- 开源支持
缺点
- 不支持事务
- 表之间关联查询很难实现
- 运维的门槛比较高
2、MongoDB简介
介于关系型DB 和非关系型DB 之间的一个产品,是非关系型DB中功能最丰富的,最像关系型DB的。它支持的结果非常松散,类似 JSON 的 BSON格式,因此可以存储比较复杂的数据类型。它最大的特点是它支持的查询语言非常强大,其语法类似于面向对象语言的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。他是一个面向集合的、模式自由的文档型数据库;
特点
- 面向集合文档的存储;
- 模式自由(自动可以增减);
- 强大的查询能力;
- 支持索引与查询计划;
- 支持索引与查询计划;
- 支持自动复制和自动故障转移;
- 支持二进制数据集 大型对象 (文件)的高效存储;
3、应用场景
经典应用案例:
- 游戏场景:存储用户信息、装备、积分等;
- 物流场景:订单信息,订单信息在运输过程中不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单的所有变更读取出来;
- 社交场景:使用MongoDB存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人,地理位置索引等信息;
- 物联网场景:存储所有接入的只能设备信息,以及设备上传的日志信息,并对这些信息进行多维度分析
- 视频直播:存储用户信息、礼物信息等;
不适用的场景:
- 高度事务性系统(eg:财务系统);
- 传统商业智能应用(eg:复杂的关联查询);
- 使用SQL更方便的时候;