云数据库MongoDB FAQ

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 云数据库MongoDB FAQ

MongoDB 功能定位是怎样的?

MongoDB 介于Memcached 和关系型数据库之间,扩展性和性能上, MongoDB 更接近于 Memcached,功能上,MongoDB 更接近于关系型数据库。

MongoDB 部署模型是怎样的?

在生产环境中,MongoDB 经常会部署成一个三节点的复制集,或者一个分片集群。

1. MongoDB 部署为一个复制集时,应用程序通过驱动,直接请求复制集中的主节点,完成读写操作。 另外两个从节点,会自动和主节点同步,保持数据的更新。

2. MongoDB 被部署为一个分片集群时,应用程序通过驱动,访问路由节点,也就是 Mongos 节点 Mongos 节点会根据读写操作中的片键值,把读写操作分发的特定的分片执行,然后把分片的执行结果合并,返回给应用程序。

MongoDB 复制集主节点遇到故障会如何处理?

在集群运行的过程中,万一主节点遇到故障,两个从节点会在几秒的时间内选举出新的主节点,继续支持应用的读写操作。

MongoDB 分片集群中集群数据是如何分布的?

元数据记录在 Config Server 中,这也是一个高可用的复制集。每个分片管理集群中整体数据的一部分,也是一个高可用复制集。此外,路由节点,也就是 Mongos 节点在生产环境通常部署多个。这样,整个分片集群没有任何单点故障。

MongoDB 和关系型数据的有哪些概念可以对应?

关系型数据通常有数据库和表的概念,对应在 MongoDB 里有数据库和集合关系;数据库有主表和子表,对应 MongoDB 通常使用内嵌的子文档或内嵌数组;关系型数据里有 Index 索引,MongoDB也有类似概念;关系数据库里一条数据称为一行,MongoDB 称为一个文档 Document;关系型数据库里面的列,对应到 MongoDB 成为一个字段 Field;关系数据库里面经常使用 Join 连接操作,对应 MongoDB 通常使用内嵌方式解决,如果使用 Linking 方式,对应使用$Lookup 操作符也可支持左外链接;关系型数据库里面还有视图,对应 MongoDB 也有只读视图和按需物化视图;关系型数据库里面会有 ACID 的多记录事务,对应的 MongoDB 里面会有 ACID 的多文档事务。

MongoDB 数据结构是怎样的?

MongoDB 采用 JSON 文档结构,支持如下数据格式: 字符串、数字、布尔、空值、数组、对象。

为什么 MongoDB 只有左连接?

反范式设计

读取效率低下

Join 这种操作上是违反MongoDB 设计的初衷的,这样操作经常要对两个表的不同数据进行连接操作,这些数据在物理存储的时候,通常不是在相邻的区域里面,读取的效率比较低

分布式环境

MongoDB 是一个分布式的环境,校验操作的左右两边如果都是一个分片的表,当进行 Join 操作的时候,左边有一个又有一条数据,它可能在分片一上要连接的一个数据可能在分片二上,下一条数据可能又是另外一种情况,这种情况下数据库很难保证整个操作的性能。

MongoDB 频繁的插入和删除会有什么问题?

MongoDB数据库在长期频繁地删除写入数据或批量删除了大量数据后,将产生很多物理空间碎片。这些碎片会占用磁盘空间,降低磁盘利用率。

MongoDB 磁盘碎片率如何计算?

# 一次性查看所有collection碎片率

function getCollectionDiskSpaceFragRatio(dbname, coll) {

  var res = db.getSiblingDB(dbname).runCommand({

      collStats: coll

  });

  var totalStorageUnusedSize = 0;

  var totalStorageSize = res['storageSize'] + res['totalIndexSize'];

  Object.keys(res.indexDetails).forEach(function(key) {

      var size = res['indexDetails'][key]['block-manager']['file bytes available for reuse'];

      print("index table " + key + " unused size: " + size);

      totalStorageUnusedSize += size;

  });

  var size = res['wiredTiger']['block-manager']['file bytes available for reuse'];

  print("collection table " + coll + " unused size: " + size);

  totalStorageUnusedSize += size;

  print("collection and index table total unused size: " + totalStorageUnusedSize);

  print("collection and index table total file size: " + totalStorageSize);

   print("Fragmentation ratio: " + ((totalStorageUnusedSize * 100.0) / totalStorageSize).toFixed(2) + "%");

}

use xxxdb

db.getCollectionNames().forEach((c) => {print("\n\n" + c); getCollectionDiskSpaceFragRatio(db.getName(), c);});

 

MongoDB 主备切换时机是什么时候?

1.  主节点不可用;

2.  新增节点(更高的 Priority);

3.  主动运维,rs.stepDown() or rs.reconfig()

MongoDB 主备切换流程是怎样的?

1.  副本集之间保持心跳(默认 2 秒探测一次);

2.  如果超出 ElectionTimeoutMillis(默认 10 秒)没有探测到主节点,Secondary 节点 会发起选举,发起前检查自身条件:Priority 是否大于0、当前状态是否够新;

3.  在真正选举前,会先进行一轮空投(Dry-Run),避免当前 Primary 无意义的降级( StepDown),因为 Primary 收到其他节点且 Term 更高的话则会降级;

4.  Dry-Run 成功后,会增加自身的 Term 发起真正的选举,如果收到多数派的选票则选举成功,把新的拓扑信息通过心跳广播到整个副本。

MongoDB 写入一个文档有哪些步骤?

1.  单行事务对表写一条记录

2.  MongoDB 会添加一个_ID 字段,会将索引项写到_ID 索引中;

3.  将索引项写到用户创建的索引当中。

4.  唯一索引检查 Key 是否重复,检查索引表里这个记录是否已经存在,如果存在的话则会报错;

5.  写入操作日志到复制表,将写操作同步到 Secondary 节点上。

选择 MongoDB 有哪些技术指标参考?

l  数据量。假设单表里面要保存的处理数据超过亿或者10亿的级别,而且使用挺频繁,这个时候就可以考虑使用 MongoDB

l  数据结构模型不确定,或者明确会多变

l  高并发读写,MongoDB 通过分片直接支持。


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
29天前
|
运维 监控 NoSQL
【MongoDB 复制集秘籍】Secondary 同步慢怎么办?深度解析与实战指南,让你的数据库飞速同步!
【8月更文挑战第24天】本文通过一个具体案例探讨了MongoDB复制集中Secondary成员同步缓慢的问题。现象表现为数据延迟增加,影响业务运行。经分析,可能的原因包括硬件资源不足、网络状况不佳、复制日志错误等。解决策略涵盖优化硬件(如增加内存、升级CPU)、调整网络配置以减少延迟以及优化MongoDB配置(例如调整`oplogSize`、启用压缩)。通过这些方法可有效提升同步效率,保证系统的稳定性和性能。
40 4
|
1月前
|
监控 NoSQL MongoDB
MongoDB数据库的索引管理技巧
【8月更文挑战第20天】MongoDB数据库的索引管理技巧
42 1
|
1月前
|
监控 NoSQL MongoDB
mongodb数据库 使用技巧
【8月更文挑战第20天】mongodb数据库 使用技巧
34 1
|
1月前
|
JSON NoSQL Ubuntu
在Ubuntu 14.04上如何备份、恢复和迁移MongoDB数据库
在Ubuntu 14.04上如何备份、恢复和迁移MongoDB数据库
56 1
|
1月前
|
NoSQL 大数据 MongoDB
云中对决:Amazon DocumentDB 与 MongoDB的终极较量,谁将主宰云端数据库的未来?
【8月更文挑战第8天】在云计算与大数据时代,文档数据库因灵活高效备受开发者青睐。本文作为指南,全面对比Amazon DocumentDB与MongoDB。DocumentDB兼容MongoDB,便于迁移;在AWS环境下,它提供卓越的性能与自动伸缩能力。MongoDB则侧重于自定义部署与成本控制。DocumentDB作为托管服务简化管理但成本较高,而MongoDB需自行处理安全性与备份。根据需求与预算,开发者可作出最佳选择。
40 3
|
21天前
|
C# 开发者 Windows
全面指南:WPF无障碍设计从入门到精通——让每一个用户都能无障碍地享受你的应用,从自动化属性到焦点导航的最佳实践
【8月更文挑战第31天】为了确保Windows Presentation Foundation (WPF) 应用程序对所有用户都具备无障碍性,开发者需关注无障碍设计原则。这不仅是法律要求,更是社会责任,旨在让技术更人性化,惠及包括视障、听障及行动受限等用户群体。
44 0
|
21天前
|
Java 前端开发 Spring
技术融合新潮流!Vaadin携手Spring Boot、React、Angular,引领Web开发变革,你准备好了吗?
【8月更文挑战第31天】本文探讨了Vaadin与Spring Boot、React及Angular等主流技术栈的最佳融合实践。Vaadin作为现代Java Web框架,与其他技术栈结合能更好地满足复杂应用需求。文中通过示例代码展示了如何在Spring Boot项目中集成Vaadin,以及如何在Vaadin项目中使用React和Angular组件,充分发挥各技术栈的优势,提升开发效率和用户体验。开发者可根据具体需求选择合适的技术组合。
28 0
|
1月前
|
存储 NoSQL 物联网
MongoDB:改变游戏规则的数据库,看它如何统治数据世界的每一个角落
【8月更文挑战第7天】MongoDB是一款高性能、开源的NoSQL数据库,采用文档数据模型,支持丰富查询语言及二级索引。其灵活的数据模型和扩展性使其在大数据应用、实时分析、物联网、内容管理系统及电子商务平台等多种现代场景中广泛应用。例如,在大数据应用中,它可以高效存储社交媒体的非结构化数据;在实时分析中,能快速处理新数据并即时更新结果;在物联网应用中,则适用于存储大量非结构化传感器数据;而在内容管理和电子商务平台中,能提供灵活的内容存储和高效的商品搜索功能。
51 2
|
1月前
|
JSON NoSQL MongoDB
在Ubuntu 14.04上如何导入和导出MongoDB数据库
在Ubuntu 14.04上如何导入和导出MongoDB数据库
17 0
|
1月前
|
开发框架 NoSQL 关系型数据库
基于SqlSugar的开发框架循序渐进介绍(27)-- 基于MongoDB的数据库操作整合
基于SqlSugar的开发框架循序渐进介绍(27)-- 基于MongoDB的数据库操作整合

相关产品

  • 云数据库 MongoDB 版