面试宝典之MongoDB
什么是MongoDB
MongoDB是一款由C++编写的跨平台、面向文档的非关系型数据库。是非关系型数据库当中功能最丰富、最向关系型数据库的产品。他支持的数据结构非常松散,是类似JSON的BSON格式,可以存储比较复杂的的数据类型,例如:内嵌文档、数组等。
MongoDB的特点
MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大部分功能,而且还支持对数据库建立索引。
具体特点总结如下:
1.面向集合、文档存储,易于存储对象类型的数据。
2.模式自由,无固定表结构,文档字段的个数、类型等无特殊限制。
3.支持动态查询。
4.支持完全索引。
5.支持赋值和故障恢复。
6.使用高效的二进制数据存储,包括大型对象(如视频等)。
7.支持多种开发语言API。
8.文件存储格式为BSON,支持的数据类型更丰富。
MongoDB的应用场景举例
丰富的查询语言使其可以用在服务器的日志记录,查找起来比文本灵活,导出也很方便。
游戏场景中使用MongoDB存储玩家的信息如装备、积分等直接使用内嵌文档的形式存储,方便查询和更新。
在O2O的应用场景中,通过MongoDB的地理索引查询,可以很方便的实现类似查询附近信息等功能。
MongoDB和Redis的区别(转自https://www.php.cn/redis/421928.html)
MongoDB 更类似 MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务。
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,支持多种类型的数据结构,可用作数据库,高速缓存和消息队列代理。
1、内存管理机制
Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。
MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
2、支持的数据结构
Redis 支持的数据结构丰富,包括hash、set、list等。
MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
3、数据量
当物理内存够用的时候,redis>mongodb>mysql
当物理内存不够用的时候,redis和mongodb都会使用虚拟内存。
实际上如果redis要开始虚拟内存,那很明显要么加内存条,要么你换个数据库了。
但是,mongodb不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap的交换较少。
mongodb还是能够保证性能。
4、性能
mongodb依赖内存,TPS较高;Redis依赖内存,TPS非常高。性能上Redis优于MongoDB。
5、可靠性
mongodb从1.8版本后,采用binlog方式(MySQL同样采用该方式)支持持久化,增加可靠性;
Redis依赖快照进行持久化;AOF增强可靠性;增强可靠性的同时,影响访问性能。
可靠性上MongoDB优于Redis。
6、数据分析
mongodb内置数据分析功能(mapreduce);而Redis不支持。
7、事务支持情况
Redis 事务支持比较弱,只能保证事务中的每个操作连续执行;mongodb不支持事务。
8、集群
MongoDB 集群技术比较成熟,Redis从3.0开始支持集群。
MongoDB和MySQL的区别