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