2012-03-25 21 views
2

在MongoDB中存儲一些日誌數據。現在我需要獲取實際存儲在集合中的日誌類型的列表。使用Mongodb和mapreduce創建子項目列表

我有一個這樣的文件:(假裝這可能是每一個和多個小組和分組的千)

{ 
    "Group": "Import", 
    "SubGroup": "Update server" 
},{ 
    "Group": "Import", 
    "SubGroup": "Delete server" 
} 

我想要的東西,如落得:

{ 
    "Group": "Import", 
    "SubGroups": ["Delete server", "Update server"] 
} 

但由於可能會有更多的每個SubGroup,我想要任何重複的東西...... JavaScript有沒有像HashKey集......這裏不是一個js專家。

我打算用這個的GUI,使用戶可以選擇他希望看到什麼類型的日誌。

作爲一個側面的問題。 由於Mapreduce和輸出類型可以內聯,因此可以替換和減少。是否有任何內置於MongoDB的簡單方法,因此我可以告訴它只需每x分鐘更新一次MapReduce,因爲它實際上是非常靜態的,還是我必須在自己的應用程序層實現緩存?

+0

你能解釋一下爲什麼你有這樣的文檔結構?爲什麼不只是使用SubGroups作爲數組來創建/更新文檔,那麼您根本就不必進行任何M/R更新。 – 2012-03-26 08:46:44

+0

這就像在Windows事件查看器......如果我想查詢反對票它,我需要知道什麼類型的還有,這兩種組和子組(可能有更好的名稱) 你將如何否則查詢反對票呢?這裏的建議非常受歡迎。我曾經使用過SQL ...所以no-sql空間是新的。也許我現在正以傾倒的方式來做這件事。 – Syska 2012-03-26 16:25:47

+0

嗯..也許更新你的例子更詳細?每個對象都有一個日期戳和錯誤信息?而子組不是一個明確定義的可能值列表? – 2012-03-26 20:12:48

回答

1

...沒有的JavaScript有一些像HashKey設置

所以一切都在JavaScript 哈希表。存儲你的結果是這樣,你有相同的語義得到你的哈希:

{ 
    "Group": "Import", 
    "SubGroups": { "Delete server": 1, "Update server": 1 } 
} 

由於MapReduce和輸出類型可以是內聯,替代和減少。

我的私人建議是避免inline。如果您要完成所有這些努力來運行Map/Reduce,那麼最好還是保存結果。

這使得你與replacereducemerge(選項列出here)。

它實際上是非常靜態的,還是我必須在自己的應用程序層實現緩存?

Map/Reduce的輸出只是一個集合。該集合有一個特定的格式(_id,value),但它是一個像其他所有可查詢的集合。

如果您想每10分鐘覆蓋一次彙總數據,則可以這樣做。但是,這意味着您必須在所有數據上運行Map/Reduce。這可能代表了測井系統中的大量工作。

相反,您可能只想在數據的新部分上運行M/R,然後根據現有摘要數據「重新減少」。這將是最快的。

+0

它現在沒有那麼多的日誌記錄,因爲它是一個愛好項目,但我不妨通過它學習一些東西。但感謝您的建議,我會在今晚晚些時候研究它。 愛mongo ... – Syska 2012-03-26 16:28:29