【MongoDB训练营】第一课:走进 MongoDB 答疑汇总

简介: 【MongoDB训练营】第一课:走进 MongoDB 答疑汇总
  1. 什么是网络脑裂?

简单来说,就是在分布式集群环境下,往往会有一个主节点(大脑),在网络发生分区,可能会出现同时有两个节点都认为自己是主节点,这种情况需要通过一致性协议来避免,否则同时修改了集群状态,可能导致数据错乱,具体可参考:https://juejin.cn/post/6844903895387340813

  1. 分片依据的字段有什么选择依据么

可以参考三个指标:值的多样性(cardinality,越大越好),单一值出现的频率(frequency,越小越好),shard key 对应的 value 后续发生变更的可能性(尽量不变).

  1. 每个复制集存储的东西一样吗?

一样的,这个也是MongoDB 复制协议必须要保证的。

  1. MongoDB有自己的时间同步工具吗?

MongoDB 使用了本地的物理时钟,但是为了实现因果一致性、分布式事务和 changeStream 等功能,也实现了自己的混合逻辑时钟,混合逻辑时钟会在副本集和分片集群节点间进行同步,具体机制比较复杂,这里不做特别详细的展开,感兴趣可参考:https://www.mongodb.com/presentations/implementation-of-cluster-wide-causal-consistency-in-mongodb?_ga=2.86791323.22579815.1608534765-1541357686.1598933927

  1. 分片集群部署的话,数据的聚合是在mongos中么

对于 find 查询,是的,但是对于 aggregation ,也可能是在某个 shard 上。

  1. MongoDB选注机制

这个后面有课程会讲,稍安勿躁。

  1. MongoDB底层用的B tree还是B+ tree

默认的是 WiredTiger 存储引擎,是B+ tree

  1. oplog的刷新机制

这个后面的副本集课程也会讲。

  1. 线上环境哪个阈值的配置最佳?

如果是阿里云 MongoDB 实例,参数已经根据规格调整到最佳,正常不需要修改,如果是自建,这个需要根据具体的workload 和 机器配置具体来看,比如 cache size,oplog 大小,是否使用线程池等等,没有标准答案。

  1. net.serviceExecutor的adaptive模式有什么弊端吗

这个参数主要是针对高并发模式下,相比于 thread per client 模式可以降低线程切换的开销,降低机器负载和请求延迟,缺点是,如果不是高并发场景下,吞吐相比于 synchronize 模式会下降。

  1. HBase和Mongdb在哪些地方有区别?

这个问题问的比较宽泛,简单从数据模型来说 MongoDB 的是文档模型,HBase是宽表模型,都具备存储半结构化和非结构化数据的能力,从服务的业务场景来说,MongoDB 服务于互联网业务比较多,比如游戏,在线教育等,HBase 更多的服务于大数据分析等场景;具体的大家去互联网上慢慢探索吧。

  1. insertMany可以一次插入多少条记录,一百万的记录如何插入

建议使用 bulk insert 的方式插入,一批不要超过 1000 条。

  1. find可以最多返回多少记录,如果记录太多如何处理,有类似翻页功能吗?

有 skip,limit 功能,翻页需要业务配合来实现。

  1. push和pop是原子操作吗?会出现资源竞争吗?

单文档操作保证原子,资源的竞争(contention)通过文档级锁来解决。

  1. 集群配置的是时钟同步,有什么解决方案。

前面回答过了,通过混合逻辑时钟。

  1. 对单个字段创建b树索引和哈希索引,查询时用哪个索引?

point select,hash 索引会更好,range 查询使用 b 树索引。

  1. 请问mongo多表关联查询时,有没有临时索引提交查询效率?

mongo 目前的多表联合查询能力相比于其他数据库,比如 MySQL 还是相对较弱的,只有一个 $lookup 和 4.4 的 union,目前没有临时索引的设计。

  1. 请问多表关联时,如何增加索引提高查询效率?

索引的设计也是一个比较有学问的事情,需要综合考虑到索引的查询加速功能和索引维护本身的开销,具体多表关联查询上,如果不考虑 4.4 的 union,其实就只有 $lookup,这个需要根据query 条件结合 explain 结果具体来看,索引优化本身的一些基本原则,像索引选择性这些都是适用的,具体可参考官方的一些建议:https://docs.mongodb.com/manual/applications/indexes/

  1. 多表关联查询 $lookup不支持分片,是否有其它方法解决还是不建议使用关联查询

4.4 的 $unionWith是支持分片集群的,可以进一步看下能否满足业务需求:https://docs.mongodb.com/manual/reference/operator/aggregation/unionWith/

  1. 什么情况下选择复制模式,什么情况下选择集群模式;

这里 mongodb 官方其实有一个建议,就是从成本的角度,先选择副本集,然后 scale up,但是到一定阶段,成本必然很高,甚至容量无法满足业务需求,这时候再去考虑采用分片集群。这么建议的原因是使用分片集群本身会引入一定的复杂性,而且如果要用好,还需要业务做配合,比如选择好的 shard key 等。

  1. 在复制模式下,所有节点都部署在同一台服务器上的话,请问这样还有意义吗?

从可用性角度,意义不大,从读性能扩展性角度,有意义。

  1. MongoDB 中存在的事务 和 关系型数据库中的事务有区别么? 是自动提交的 还是 需要手动提交?

如果是普通的单条操作,比如 find,insert,update,可以称之为单文档事务,默认提交如果是显示开启的多文档事务,需要手动提交。

  1. 复制集有多写节点的情况吗?

在切换的时候,有可能同时存在两个 primary的情况,进而多个节点写,但是使用更高的 writeConcern level ,比如 majority 可以避免,这个后面课程会讲。

  1. BSON文档大小限制16M,这样是不是不能一味的文档内嵌,而使用引用就要消耗额外的查询?

是的,理解的很正确

目录
相关文章
|
NoSQL MongoDB
【MongoDB训练营】第六课:事务功能使用及原理介绍 答疑汇总
【MongoDB训练营】第六课:事务功能使用及原理介绍 答疑汇总
310 0
|
SQL 存储 NoSQL
【MongoDB训练营】第七课:MongoDB最佳实践 答疑汇总【内含前6天课程答疑链接】
【MongoDB训练营】第七课:MongoDB最佳实践 答疑汇总 【内含前6天课程答疑链接】
592 0
|
NoSQL MongoDB
【MongoDB训练营】第五课:ChangeStream使用及原理介绍 答疑汇总
【MongoDB训练营】第五课:ChangeStream使用及原理介绍 答疑汇总
692 0
|
SQL NoSQL Oracle
【MongoDB训练营】第四课:分片集群的使用及原理介绍 答疑汇总
【MongoDB训练营】第四课:分片集群的使用及原理介绍 答疑汇总
707 0
|
运维 监控 NoSQL
【MongoDB训练营】第三课:复制集使用及原理介绍 答疑汇总
【MongoDB训练营】第三课:复制集使用及原理介绍 答疑汇总
586 0
|
NoSQL Oracle 关系型数据库
【MongoDB训练营】第二课:MongoDB聚合框架 答疑汇总
【MongoDB训练营】第二课:MongoDB聚合框架 答疑汇总
598 0
|
7月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
7月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
707 79
|
7月前
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
336 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
|
6月前
|
运维 NoSQL 容灾
告别运维噩梦:手把手教你将自建 MongoDB 平滑迁移至云数据库
程序员为何逃离自建MongoDB?扩容困难、运维复杂、高可用性差成痛点。阿里云MongoDB提供分钟级扩容、自动诊断与高可用保障,助力企业高效运维、降本增效,实现数据库“无感运维”。

相关产品

  • 云数据库 MongoDB 版
  • 推荐镜像

    更多