我有一個巨大的收藏與〜10億文件,這些文件(少於200)包含一些字段「rare_field
」很少。快速搜索非常罕見的領域在一個巨大的mongodb集合
我該如何儘快找到包含該字段的所有文檔?
如果我簡單地做:
collection.find({ "rare_field" : { $exists : true }})
超時。 這可能需要數天時間才能完成,所以我不確定即使通過查詢標誌防止超時也會有所幫助,但也許我錯了。
我也可以編寫一個腳本來查看所有文檔,但這樣會很慢,因爲它需要將所有10億個文檔通過網絡傳遞到我的服務器,我想要一些不需要任何數據傳遞的解決方案在電線上,並且會很快。
備註:這是一個sharded
集合。
我將發佈我當前的解決方案作爲答案,但我不確定它是100%正確的,並沒有我想要的那麼快。
將這個'rare-field'放入分片查詢中!正因爲如此,mongo也會對這個領域進行索引!所以它會很快! –
謝謝。這是一次性的事情,所以我並不需要索引。 這可能是一個很好的解決方案,當數據庫是空的,但索引這個領域現在需要很多時間,就像手工檢查所有文檔(我認爲) – marmor
你是正確的時間消耗!所以這完全取決於你的應用程序!另一種方法是將結果保存在緩存中!將結果存儲在新的集合中,或存儲在redis或smtn中! –