我有一个大型收藏的定期数据归档的请求。要求的几点引起了我的一些担忧:
- 存档的数据应移动到不同的数据库中,以便与生产应用程序进行同等的访问。
- 备份的频率可以是每月、每年甚至更低。
- 归档应该在不中断生产系统的可用性和性能的情况下进行。
此要求意味着在归档执行时的短时间内进行大量插入和删除。它有一些挑战需要解决。
- 对于同一条记录,删除只能发生并且必须在插入成功后发生。
- 大量的插入和删除可能会在复制完成到replicaset中的secondary节点之前将oplog炸毁。毕竟oplog size一般是为日常操作配置的。
对于挑战 1,Mitch Pronschinske 提出了一个非常接近的解决方案。Mitch 的存档功能解决了删除只能在插入成功后发生的问题,而不是“必须发生”的部分。尽管如此,这非常接近,并且可以在此脚本之上解决“必须发生”部分。
让我头疼的是挑战2。根据 MongoDB 的说明,更改 oplog 大小需要停机和人工干预。考虑到要求 3,这不太可能是一种选择。
有人对如何实现这一目标有任何经验或建议吗?谢谢!
我的环境信息:
- MongoDB 3.2
- 3个分片
- Replicaset:3 个数据成员,1 个成员在地理上是冗余的,优先级为 0。
- 操作系统:MS Win2012R2