正文
使用MongoDB的開發(fā)人員應(yīng)該都聽說過孤兒文檔(orphaned document)這回事兒,可謂聞著沉默,遇者流淚。本文基于MongoDB3.0來看看怎么產(chǎn)生一個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環(huán)境下,一些同時存在于不同shard上的document。我們知道,在mongodb sharded cluster中,分布在不同shard的數(shù)據(jù)子集是正交的,即理論上一個document只能出現(xiàn)在一個shard上,document與shard的映射關(guān)系維護在config server中。官方文檔指出了可能產(chǎn)生orphaned document的情況:在chunk遷移的過程中,mongod實例異常宕機,導(dǎo)致遷移過程失敗或者部分完成。文檔中還指出,可以使用 cleanupOrphaned
來刪除orphaned document。
新聞報道災(zāi)難、事故的時候,一般都有這么一個潛規(guī)則:內(nèi)容越