【问题标题】:mongodb user logs storage best practicemongodb用户日志存储最佳实践
【发布时间】:2015-01-06 07:18:22
【问题描述】:

我是 mongoDB 的新手,并试图找出存储用户日志的最佳方式。我确定了两个主要解决方案,但无法确定哪个可能是最好的。如果想到其他人,请随时分享;)

1)第一个是关于在我拥有的所有集合中存储日志。例如,如果我有“post”、“friends”、“sports”和“music”集合,那么我可以在每个集合的每个文档中创建一个日志字段,其中包含我想要存储的所有日志信息。

2)第二种方法是创建一个完整的“日志”集合,每个文档都有一个类型(“帖子”、“朋友”...)来识别我存储的日志类型以及 id引用的文档。

我真正需要的是能够尽可能快地存储和检索数据(即除日志之外的所有数据)。 (所以如果我选择(1),我必须总是从我的选择查询中删除日志,因为它们大部分时间都是无用的) 日志只会被定期访问(主要用于报告和统计),但需要映射到它们的初始文档(在 (2) 的情况下)。 我将为几乎所有要存储的非日志数据创建日志(因此在每个集合中存储日志可能会更快:一个插入对两个)。 日志记录也可以异步完成以减轻服务器的负载。

考虑到所有这些,我真的无法找到最适合我需要的。有人有什么想法/ cmets 可以分享吗?

非常感谢!

【问题讨论】:

    标签: mongodb logging


    【解决方案1】:

    您希望如何访问日志将在您的设计决策中发挥重要作用。您将根据什么标准访问您的日志文件?您是否必须按类型(例如帖子、朋友)和 id(文档的对象 id)进行查询?还有其他识别功能吗?这可能会产生额外的开销,因为您必须先读取“类型”集合,获取所需的 id,然后查询日志集合。这会产生更多的读取开销。

    我会推荐一个单独的日志集合,因为这样可以将所有相关数据保存在一个地方。然后,对于每个日志文档,在类型集合的文档 ID 和日志集合之间进行 1:1 映射。例如如果您有朋友文档,请使用朋友文档的 _id 字段作为您的日志集合中文档的 _id 字段。这样您就可以直接查找您的日志文档而无需再次阅读。如果每种类型的文档都有多个日志记录,请在日志文档中使用一个数组,并使用 mongo 的 $push 将每个日志记录附加到它。在存储、写入($push 不需要读取 - '设置并忘记')和查找时间(智能 1:1 映射 - 如果您有 _id 时不需要超过一个查询)方面,这将是一种非常有效的日志架构。

    【讨论】:

    • 我还不确定我的日志将如何被访问。但是您在此处提供的见解应该会有很大帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多