在我當前的項目中,我使用了兩個數據庫。如何減少從mongo數據庫同步文檔的數量
- 甲MongoDB實例收集來自不同數據提供者的數據(ABT 15M文檔)
- 另一個(關係)數據庫實例僅保持所需要的應用程序的數據,即,在MongoDB實例的數據子集。 (abt 5M行)
作爲同步過程的一部分,我需要定期檢查MongoDB中的新條目,具體取決於關係數據庫中的數據。
讓我們說,這是關於歌曲和藝術家,在MongoDB中的文件可能是這樣的:
同步過程的{_id:1,artists:["Simon","Garfunkel"],"name":"El Condor Pasa"}
一部分是從已經在存在這些藝術家導入/更新所有歌曲關係數據庫,目前大約有1M位藝術家。
那麼,如何從MongoDB中檢索1M名藝術家的所有歌曲以供導入?
我的第一個想法(和嘗試)是對所有藝術家進行查詢,並查詢每位藝術家的所有歌曲(當然,在「藝術家」字段中有一個索引)。但是這需要花費幾分鐘的時間才能讓每一批1.000名藝術家成爲這個過程的長者。
我的第二個想法是將所有現有的藝術家寫入單獨的mongoDB集合,並擁有超級查詢,該查詢只檢索存儲在那裏的藝術家的歌曲。但到目前爲止,我還沒有能夠基於兩個集合檢索數據。 這是map/reduce的一個很好的用例嗎?如果是的話,有人可以請。給我一個關於如何實現這一點的提示? (我對NoSQL並不是全新的東西,但是當涉及到map/reduce時,這是一個新手。) 或者這個想法太瘋狂了,我必須堅持一個運行好幾天的過程?
在此先感謝您的任何提示。
從Mongo檢索文檔應該相當快。它是否讀取了1000位藝術家數據花費大量時間,還是正在更新花費大量時間的關係數據庫? – user1163459 2012-02-02 12:53:48
這些測試運行沒有向關係數據庫寫入任何內容。我從關係數據庫中查詢了1.000批次(這需要幾秒鐘的時間,主要是因爲我正在檢索完整的實體,而不僅僅是名稱)。之後,我查詢MongoDB 1.000次(每個藝術家一次)檢索他們的歌曲。我認爲這是大量的單個查詢花費時間,這就是爲什麼我更願意完成這個服務器端(即MongoDB端) – peterp 2012-02-02 13:00:41