网站首页 > 教程文章 正文
Bugsnag是一家为移动应用开发者提供实时的Bug追踪及检测服务的创业公司,Bugsnag已经使用MongoDB存储超过TB级的文档数据。从Bugsnag的第一个版本开始他们就使用MongoDB存储业务数据。近日,Bugsnag的工程师Simon Maynard在博客上分享了他们的MongoDB分片集群经验,并开源了几个他们常使用的脚本。
带标签的分片(Tag Aware Sharding)
带标签的分片是MongoDB 2.2版本中引入的新特性,此特性支持人为控制数据的分片方式,从而使数据存储到合适的分片节点上。具体的做法是通过对分片节点打tag标识,再将sharding key 按范围对应到这些标识上。在Bugsnag中,每个页面的加载都会涉及到用户集合,比如查询用户是否登录,当应用向主分片上写入大量数据时,所有的用户请求都可能因此变得很慢。为了解决这个问题,Bugsnag对大的分片中的所有分片集合添加了一个标签,这样用户集合就可以存储到一台小型机器上,接下来就可以在内存中直接存取用户数据。关于带标签的分片特性具体如何使用读者也可以参考Asya的这篇博客。
空的数据块
在删除旧的数据时,分片中会出现空的数据块,这样会导致分片不平衡。平衡分片的算法仅仅只是调整分片中数据块的数量,忽略了数据块的大小。在MongoDB 2.6中,新增了一个mergeChunks命令用来将空的数据块合并到连续范围的数据块上,但是这个命令并不可以自动执行,所以Bugsnag编写了一个脚本,以依次检查数据块,并自动合并空的数据块。
大的数据块
大的数据块是指数据块的大小超过配置大小,Bugsnag编写了一个脚本用来发现并调整大数据块的大小。由于需要连接mongod和mongo实例,所以使用了MongoDB的Ruby接口Mongoid。脚本会将大的数据块分割,以保证集群中数据集合分布均衡。
孤立文档(Orphaned documents)
在正常情况下,系统中不会有孤立文档。不过,块迁移过程中的一些失败情况可能会留下孤立文档。孤立文档可以被安全删除,MongoDB 2.6中可以使用cleanupOrphaned命令从分片中删除孤立文档。关于孤立文档的更多内容读者可以参考MongoDB工程师的这篇博文。
MoveChunk目录
MoveChunk目录中的文件是进行分片均衡操作时产生的临时文件,操作完成后,这些文件就可以被删除。Bugsnag使用定时任务来定期清空该目录,MongoDB也支持关闭此功能,读者可以自行测试。
监控分片环境
-
Shell命令
-
Mongostat Mongostat是MongoDB自带的状态检测工具,当MongoDB集群出现问题时,可以运行mongostat –discover来检查集群中各个mongos机器的性能指标。
作者最后总结到运行一个MongoDB分片集群并不难,但是在运行过程中也不时地会有一些小的问题出现。在Bugsnag的博客中有很多MongoDB的博文,读者可以自行学习。
猜你喜欢
- 2025-03-20 【小白新手教程】在Ubuntu中安装MongoDB
- 2025-03-20 Deepseek+fastGPT部署企业本地知识库步骤和注意事项
- 2025-03-20 从0到1,手把手教你通过Docker安装Mongodb
- 2025-03-20 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极...
- 2025-03-20 MongoDB下载安装(mongodb安装教程图解)
- 2025-03-20 MongoDB 高可用集群 -复制集搭建(mongodb高可用方案)
- 2025-03-20 Mongodb在Linux上安装教程(mongodb4.4.1安装步骤)
- 2025-03-20 一次线上事故,我顿悟了MongoDB的精髓
- 2025-03-20 Python对MongoDB的异步插入、查询、更新、删除操作如何提升性能
- 2025-03-20 国产信创操作系统银河麒麟常见软件适配
- 05-11阿里开源MySQL中间件Canal快速入门
- 05-11MyBatis插件开发实战:手写一个分页插件
- 05-11Flask数据库——SQLAlchemy
- 05-11MySQL 到 Hazelcast Cloud 实时数据同步实操分享
- 05-11sqlmap 详解
- 05-11一篇文章让你学会Elasticsearch中的查询
- 05-11Mysql性能优化这5点你知道吗?简单却容易被初学者忽略!
- 05-11Spring Boot 实现 MySQL 读写分离技术
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)