2012-02-21 51 views
2

從我的經驗來看,這是我想出的。如何存儲用戶在大型服務器上的日誌最佳做法

我目前正在將用戶和統計類保存到MongoDb中,並且所有工作都可以正常工作。

但是,我如何保存每個用戶生成的日誌?

正在考慮使用LogBack SiftingAppender並委託日誌信息
來分隔MongoDb Collections。就像每個MongoDb Collection都有用戶的ID一樣。
這樣我就不必創建高級mapreduce查詢了,因爲日誌整齊堆疊。

或使用SiftingAppender與FileAppender,因此每個用戶有一個單獨的日誌文件。

如果MongoDB有一百萬個日誌集合,每個用用戶標識命名,那麼這個問題就出現了。 (它甚至可以btw)

如果一切都存儲在MongoDb MongoDb主從複製使得 很容易,如果主節點死亡。

怎麼樣FileAppender方法。感覺像將有一大堆日誌文件 管理。根據字母表,可以將它們保存在文件夾中。文件夾A 供用戶/編號的名稱/編號以A開頭。

有什麼其他選項可以使其工作?

回答

1

利用嵌入式文檔併爲每個用戶提供一個文檔,其中包含一組包含日誌文件的嵌入式文檔。如果集合變大,您也可以從分片中受益。

+0

是的,這是一個很好的ide。已經有其他幾個嵌入式文檔。每個用戶都有他的日誌嵌入當然。它只爲原木創造一個鑽孔新的Db感覺很誘人。 dontno – Erik 2012-02-21 06:57:48

+1

如果您擔心開銷,您可以使用DBRef(ObjectIds)的數組來分隔不同集合中的日誌文檔,以便每次查詢用戶文檔時都不會加載所有日誌。 – 2012-02-21 07:04:01

+0

是否知道如果slf4j,log4j,LogBack等不是附加到文件或控制檯,而是可以將日誌條目即時插入嵌入式文檔中,就像您所描述的那樣。有一種感覺,我必須做一些自定義MongoDBAppender的東西? – Erik 2012-02-21 17:58:50

2

在1M集合中,數據庫的默認名稱空間文件爲16MB,允許大約24000個名稱空間(12000個集合+它們的_id索引)。更多信息on this website

您可以使用--nssize選項將最大.ns(名稱空間)文件大小設置爲2GB,這將允許大概3072000個名稱空間。

+0

解決了! – Erik 2012-02-21 19:36:30

相關問題