面试问题汇总
# MongoDB是由哪种语言写的
MongoDB用c++编写的,流行的开源数据库MySQL也是用C++开发的。C++1983年发行是一种使用广泛的计算机程序设计语言。它是一种通用程序设计语言,支持多重编程模式。
# MongoDB有哪些适用场景
- 网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的备份、扩容;
- 缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层,在系统重启之后,由Mongo搭建的持久化缓存层可以避免数据源过载;
- 大尺寸、低价值的数据存储:使用传统的关系型数据库存储一些大尺寸低价值数据时会比较浪费(比如日志),在此之前,很多时候程序员往往会选择传统的文件进行存储;
- 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对 MapReduce 以及集群高可用的解决方案;
- 用于对象及JSON 数据的存储:Mongo 的BSON 数据格式非常适合文档化格式的存储及查询;
具体的应用场景
- 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,经常修改,方便查询、更新;
- 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来;
- 社交场景,使用 MongoDB 存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能;
- 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析;
- 直播,使用 MongoDB 存储用户信息、礼物信息(变化大)等;
# MongoDB为啥速度快
写操作MongoDB比传统数据库快的根本原因是Mongo使用的内存映射技术 - 写入数据时候只要在内存里完成就可以返回给应用程序,这样并发量自然就很高。而保存到硬体的操作则在后台异步完成。注意MongoDB在2.4就已经是默认安全写了(具体实现在驱动程序里),所以楼上有同学的回答说是”默认不安全“应该是基于2.2或之前版本的。
读操作MongoDB快的原因是: 1)MongoDB的设计要求你常用的数据(working set)可以在内存里装下。这样大部分操作只需要读内存,自然很快。 2)文档性模式设计一般会是的你所需要的数据都相对集中在一起(内存或硬盘),大家知道硬盘读写耗时最多是随机读写所产生的磁头定位时间,数据集中在一起则减少了关系性数据库需要从各个地方去把数据找过来(然后Join)所耗费的随机读时间
另外一个就是如Mongo是分布式集群所以可以平行扩展。目前一般的百万次并发量都是通过几十上百个节点的集群同时实现。这一点MySQL基本无法做到(或者要花很大定制的代价)
编辑 (opens new window)
上次更新: 2021/04/08, 21:41:12