正文
使用MongoDB的开发人员应该都听说过孤儿文档(orphaned document)这回事儿,可谓闻着沉默,遇者流泪。本文基于MongoDB3.0来看看怎么产生一个orphaned document,要求MongoDB的运行方式需要是sharded cluster,如果对这一部分还不是很了解,可以参考一下这篇文章。
在MongoDB的官方文档中,对orphaned document的描述非常简单:
In a sharded cluster, orphaned documents are those documents on a shard that also exist in chunks on other shards as a result of failed migrations or incomplete migration cleanup due to abnormal shutdown. Delete orphaned documents using
cleanupOrphaned
to reclaim disk space and reduce confusion
可以看到,orphaned document是指在sharded cluster环境下,一些同时存在于不同shard上的document。我们知道,在mongodb sharded cluster中,分布在不同shard的数据子集是正交的,即理论上一个document只能出现在一个shard上,document与shard的映射关系维护在config server中。官方文档指出了可能产生orphaned document的情况:在chunk迁移的过程中,mongod实例异常宕机,导致迁移过程失败或者部分完成。文档中还指出,可以使用 cleanupOrphaned
来删除orphaned document。
新闻报道灾难、事故的时候,一般都有这么一个潜规则:内容越