【问题标题】:how to store User logs on a large server best practice如何在大型服务器上存储用户日志最佳实践
【发布时间】:2012-09-13 17:07:33
【问题描述】:

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

我目前正在将用户和统计类保存到 MongoDb 中,一切正常。

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

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

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

如果 MongoDB 有 100 万个日志集合,每个日志集合都以用户 ID 命名,我会遇到问题。 (顺便说一句,有可能吗)

如果所有内容都存储在 MongoDb 中,那么 MongoDb 主从复制会进行 如果主节点死亡,这很容易。

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

还有哪些其他选项可以使这项工作发挥作用?

【问题讨论】:

    标签: mongodb logback


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      利用嵌入式文档并为每个用户拥有一个文档,其中包含一组包含日志文件的嵌入式文档。如果集合变得很大,您也可以从分片中受益。

      【讨论】:

      • 是的,这是个好主意。已经有其他几个嵌入式文档。当然,每个用户都嵌入了他的日志。只为原木创建一个新的 Db 是很有诱惑力的。将日志与休息区分开,不知道
      • 如果您担心开销,可以使用 DBRef (ObjectIds) 数组将日志文档分隔到不同的集合中,这样每次查询用户文档时都不会加载所有日志。跨度>
      • 您知道 slf4j、log4j、LogBack 等是否可以像您描述的那样将日志条目即时插入到嵌入式文档中,而不是附加到文件或控制台。感觉我必须做一些自定义 MongoDBAppender 的东西??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2011-02-22
      • 1970-01-01
      • 2017-03-04
      相关资源
      最近更新 更多