数据库面试题(5)MongoDB基础

数据库面试题(5)MongoDB基础

1 MongoDB是什么?

MongoDB 是基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点可以保证服务器性能。MongoDB 提供可扩展的高性能 数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似 JSON 对象,字段值可以包含其他文档,数组及文档数组。

2 MongoDB有哪些特点?

  • 面向集合(Collection)和文档(document)的存储,以JSON格式的文档保存数据。
  • 高性能,支持Document中嵌入Document减少了数据库系统上的I/O操作以及具有完整的索引支持,支持快速查询
  • 高效的传统存储方式:支持二进制数据及大型对象
  • 高可用性,数据复制集,MongoDB 数据库支持服务器之间的数据复制来提供自动故障转移(automatic failover
  • 高可扩展性,分片(sharding)将数据分布在多个数据中心,MongoDB支持基于分片键创建数据区域
  • 丰富的查询功能,,聚合管道(Aggregation Pipeline)、全文搜索(Text Search)以及地理空间查询(Geospatial Queries)
  • 支持多个存储引擎,比如WiredTiger存储引、In-Memory存储引擎。
  • 支持在服务端执行脚本,采用 Javascript 编写函数直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。

3 在哪些场景使用MongoDB?

如果业务中存在大量复杂的事务逻辑操作,则不要用MongoDB数据库。在处理非结构化 / 半结构化的大数据使用MongoDB,操作的数据类型为动态时也使用MongoDB

  • 内容管理系统:切面数据、日志记录
  • 游戏场景:存储游戏用户信息,用户的装备、积分等以内嵌文档的形式存储,方便查询、更新。
  • 物流场景:存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
  • 社交场景:存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。

4 MongoDB支持哪些数据类型?

Java类似数据类型:

类型 解析
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的
Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位
Double 双精度浮点值。用于存储浮点值
Boolean 布尔值。用于存储布尔值(真/假)
Arrays 用于将数组或列表或多个值存储为一个键
Datetime 记录文档修改或添加的具体时间

MongoDB特有数据类型:

类型 解析
ObjectId 用于存储文档 id,ObjectId是基于分布式主键的实现MongoDB分片也可继续使用
Min/Max Keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比
Code 用于在文档中存储 JavaScript代码
Regular Expression 用于在文档中存储正则表达式
Binary Data 二进制数据。用于存储二进制数据
Null 用于创建空值
Object 用于内嵌文档

5 MongoDB中如何实现事务?

在MongoDB 4.0及以后版本中,MongoDB提供了多文档事务的支持。事务是对多个操作进行的原子性操作,要么全部执行成功,要么全部失败回滚。事务可以在一个或多个文档上执行读和写操作。为了使用事务,需要满足以下条件:

  • MongoDB服务器的版本必须为4.0或更高版本。
  • 数据库必须是副本集或分片集群。
  • 启用副本集中的每个成员的写入确认。

在MongoDB中,事务可以通过startSession()方法创建一个Session对象,然后在Session对象中执行事务。使用Session对象可以跨多个操作执行事务,从而保证事务的原子性。

6 MongoDB中如何实现分片(Sharding)?

MongoDB可以通过水平分片来扩展数据库的容量和吞吐量。分片是将数据库中的数据分布在多个机器上的过程,每个机器都存储数据的一个子集。分片通常在面临大量数据或高并发请求的情况下使用。MongoDB的分片方案包含以下几个步骤:
1)创建分片集群:分片集群包含多个分片节点和一个或多个mongos路由器节点。mongos节点是客户端与分片集群交互的入口点。
2)为数据库选择分片键:选择适当的分片键可以确保数据能够均匀地分布在各个分片节点上。
3)启动mongos路由器节点:启动mongos路由器节点,并将它们连接到分片集群。
4)启动分片节点:启动一组分片节点,并将它们连接到分片集群。
5)创建分片集合:创建一个要分片的集合,并指定分片键。
6)启用分片:启用分片后,MongoDB会自动将数据均匀地分布在各个分片节点上。

7 如何使用MongoDB中的Map-Reduce?

MongoDB的Map-Reduce是一种分布式计算框架,用于对大规模数据进行批量处理。它可以将Map操作和Reduce操作分别应用于输入数据的不同部分,并将处理结果汇总为最终结果。Map-Reduce通常用于处理离线数据,例如生成报表、统计指标、计算复杂的数据关系等。MongoDB支持基于JavaScript的Map-Reduce,也支持基于聚合管道的Map-Reduce。

8 MongoDB如何备份和还原数据?

MongoDB可以通过mongodump和mongorestore工具进行备份和还原。mongodump工具可以将MongoDB数据库备份到文件系统中,mongorestore工具可以将备份的数据还原到MongoDB中。使用mongodump备份数据的基本语法如下: shell mongodump –host –port –out ` ;使用mongorestore还原数据的基本语法如下: `shell mongorestore –host –port

9 MongoDB的聚合管道(Aggregation Pipeline)是什么?

MongoDB的聚合管道是一种对文档进行聚合计算的框架,类似于SQL中的GROUP BY和聚合函数。聚合管道由一系列操作符组成,可以对输入的文档进行筛选、排序、分组、投影、聚合等操作,并输出计算结果。常用的操作符包括 shell $match、$sort、$group、$project、$limit、$skip、$unwind、$lookup 等。

10 说说MongoDB常见的增删改查操作?

  • Create:db.collection.insert();
  • Read:db.collection.find();
  • Update:db.collection.Update();
  • Delete:db.collection.deleteOne({price:60});

11 什么是 Collection、 Document,以及与关系型数据库术语类比?

  • 集合 Collection 位于单独的一个数据库MongoDB 文档Document集合,它类似关系型数据库(RDBMS)中的表Table。一个集合Collection内的多个文档Document可以有多个不同的字段。通常情况下,集合Collection中的文档Document有着相同含义。
  • 文档Document由key-value构成。文档Document是动态模式,这说明同一集合里的文档不需要有相同的字段和结构。类似于关系型数据库中table中的每一条记录。
  • 与关系型数据库术语类比
mongodb 关系型数据库
Database Database
Collection Table
Document Record/Row
Filed Column
Embedded Documents Table join

12 MySQL和 Mongodb 的区别?

形式 MongoDB MySQL
数据库模型 非关系型 关系型
存储方式 虚拟内存+持久化 不同的引擎有不同的存储方式
查询语句 独特的MongoDB查询方式 传统SQL语句
架构特点 副本集以及分片 常见单点、M-S、MHA、MMM等架构方式
数据处理方式 基于内存,将热数据存在物理内存中,从而达到高速读写 不同的引擎拥有自己的特点
使用场景 事件的记录,内容管理或者博客平台等数据大且非结构化数据的场景 适用于数据量少且很多结构化数据

13 Mongodb 和 Redis 区别?

形式 MongoDB redis
内存管理机制 MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘 Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据
支持的数据结构 MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引 Redis 支持的数据结构丰富,包括hash、set、list等
性能 mongodb依赖内存,TPS较高 Redis依赖内存,TPS非常高。性能上Redis优于MongoDB
可靠性 支持持久化以及复制集增加可靠性 Redis依赖快照进行持久化;AOF增强可靠性;增强可靠性的同时,影响访问性能
数据分析 mongodb内置数据分析功能(mapreduce) Redis不支持
事务支持情况 只支持单文档事务,需要复杂事务支持的场景暂时不适合 Redis 事务支持比较弱,只能保证事务中的每个操作连续执行
集群 MongoDB 集群技术比较成熟 Redis从3.0开始支持集群

14 MongoDB索引类型有哪些?

  • 单字段索引(Single Field Indexes)
  • 复合索引(Compound Indexes)
  • 多键索引(Multikey Indexes)
  • 全文索引(text Indexes)
  • Hash 索引(Hash Indexes)
  • 通配符索引(Wildcard Index)
  • 2dsphere索引(2dsphere Indexes)

15 MongoDB 在A:{B,C}上建立索引,查询A:{B,C}和A:{C,B}都会使用索引吗?

MongoDB 索引使用 B-tree 树原理,只会在 A:{B,C} 上使用索引
 
16 MongoDB中什么是聚合?

聚合操作能够处理数据记录并返回计算结果。聚合操作能将多个文档中的值组合起来,对成组数据执行各种操作,返回单一的结果。相当于 SQL 中的 count(*) 组合 group by。对于 MongoDB 中的聚合操作,应该使用aggregate()方法。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注