天天看点

【MongoDB训练营】第七课:MongoDB最佳实践 答疑汇总【内含前6天课程答疑链接】

1.请问关于MongoDB 5分片环境,每个分片的架构是主从arbiter(交叉部署), 把其中的部分片的一个副本节点迁移到新机器上,现在每个分片加入一个数据节点,以4个节点的方式运行(主从从arbiter), 变更当天,再切换剔除其中一个节点,这样的方案可行吗?变更当天需要登录mongos更新分片信息吗?期待老师的答复

A:可以的,添加新节点之后会自动进行数据同步,待数据同步完成,将老机器上的节点通过rs.remove()移除就可以了。为分片增加节点不需要更新mongos信息,这个不涉及到分片路由信息的变动。

2.单个分片的副本集以4节点运行可以吗

A: 如果本身已经有三个数据节点了(一个primary和两个secondary),不建议再加一个arbiter,保持投票节点为奇数个,防止脑裂场景

3.mongodb和es应用场景有何区别

MongoDB的适用场景TJ老师视频中也讲到了,ES的主要场景是全文检索、搜索、时序/日志分析等,还是有很多区别的

4.mongodb的周边生态建设太缓慢,比如sharding的一致性备份之类的,好像到目前还没有特别完善的方案。您怎么看mingodb的周边生态工具建设

A: 在MongoDB周边生态工具上,阿里云提供了DMS(可视化管理工具)、DBS(数据库备份)、DAS(数据库自治)、DTS(数据迁移)等服务,有兴趣可以关注。阿里云MongoDB提供了sharding的一致性备份方案,并且支持恢复到任意时间点,这个基于开源产品的话目前应该确实并没有比较好的方案,存在一些技术难点。

5.实时数据分析,有个场景,用oracle做的,sql比较能支持复杂条件语句查询分析,但是累计下来数据量越来越大,只能做结转,现在想迁移到用mongo做,但是感觉mongodb貌似不太支持复杂条件的sql查询,有什么好的处理办法吗?谢谢老师

A:这个要结合数据模型和业务查询需求来综合看,如果主要的查询分析请求需要涉及多表数据的关联查询,不建议用,除此之外,MongoDB是能满足很多复杂查询的,这个通过MongoDB提供aggregate的各种操作符,可以实现很强大的查询分析能力。

6.在mongodb内存放图片与视频,能讲一下实际的使用情况吗?

A: 这个可能需要看一下具体的case来看

7.这么大量的数据,memory 要求是不是特别高呢

A:MongoDB的分片扩展能力很好,对于大量数据,首先是可以通过sharding集群架构来解决数据分布问题,数据分摊到多个节点/机器来存储。通常来说,MongoDB使用的WiredTiger引擎的cache size与每个shard节点的磁盘数据量是有一个比例关系的。

8.mongo只用来记录api层的业务数据,提供业务单据的详情查询,后期的报表用es或者关系型数据库做为数据源,这种场景下,mongo是否需要做分片?从mongo将业务数据转成es需要的统计数据,这段处理可以用哪些方法实现呢?

A:MongoDB是否要做分片,主要还是当前数据量已经未来业务的增长情况,如果预估数据量会比较大、数据增长较快,则优先使用分片。将数据从MongoDB同步到ES,也有很多的方案,比如mongodb-connector、ES提供的插件都可以做。

【内含前6天课程答疑汇总】

Day1 走进MongoDB

https://developer.aliyun.com/article/780279

Day2 MongoDB聚合框架

https://developer.aliyun.com/article/780474

Day3 复制集使用及原理介绍

https://developer.aliyun.com/article/780482

Day4 分片集群的使用及原理介绍

https://developer.aliyun.com/article/780552

Day5 ChangeStream使用及原理介绍

https://developer.aliyun.com/article/780590

Day6 事务功能使用及原理介绍

https://developer.aliyun.com/article/780594