MongoDB 用户日志存储最佳实践



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

1)第一个是关于在我拥有的所有集合中存储日志。例如,如果我有"帖子"、"朋友"、"体育"和"音乐"集合,那么我可以在每个集合的每个文档中创建一个日志字段,其中包含我要存储的所有日志记录信息。

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

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

考虑到所有这些,我无法真正找到最适合我的需求。有人有任何想法/意见要分享吗?

多谢!

您希望

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

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

最新更新