mongodb用户记录存储最佳实践

时间:2015-01-06 07:18:22

标签: mongodb logging

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

1)第一个是关于在我拥有的所有馆藏中存储日志。例如,如果我有' post',' friends',' sports'和音乐'集合,然后我可以在每个集合的每个文档中创建一个日志字段,其中包含我想要存储的所有日志记录信息。

2)第二种方法是创建一个完整的日志'集合,每个文档都有一个类型(' post',' friends' ...)来标识我存储的日志类型以及文档的ID提到了。

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

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

非常感谢!

1 个答案:

答案 0 :(得分:0)

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

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

相关问题