如何将用户日志存储在大型服务器上的最佳实践

时间:2012-02-21 06:38:57

标签: mongodb logback

根据我的经验,这就是我想出的。

我目前正在将用户和统计类保存到MongoDb中,一切工作都很顺利。

但是如何保存每个用户生成的日志?

正在考虑使用LogBack SiftingAppender并委派日志信息
分开MongoDb Collections。像每个MongoDb Collection都有用户的身份 这样我就不必创建高级mapreduce查询了,因为日志堆积得很整齐。

或者将SiftingAppender与FileAppender一起使用,以便每个用户都有一个单独的日志文件。

如果MongoDB有一百万个日志集合,每个日志集合都以用户ID命名,那么我就遇到了问题。 (它甚至可能顺便说一下)

如果一切都存储在MongoDb中MongoDb主从复制 主节点死亡很容易。

FileAppender方法怎么样?感觉会有很多日志文件 管理。根据Alphabet,可以将它们保存在文件夹中。文件夹A. 对于名称/ id以A开头的用户/ id。

使这项工作有其他选择吗?

2 个答案:

答案 0 :(得分:2)

在1M的集合中,db的默认名称空间文件为16MB,允许大约24000个名称空间(12000个集合+它们的_id索引)。更多信息on this website

您可以使用--nssize选项将最大.ns(命名空间)文件大小设置为2GB,这可能允许3072000个命名空间。

答案 1 :(得分:1)

使用嵌入式文档,并为每个用户提供一个文档,其中包含一系列包含日志文件的嵌入文档。如果集合变大,您也可以从分片中受益。