mongodb 用户日志存储最佳实践
mongodb user logs storage best practice
我是 mongoDB 的新手,正在尝试找出存储用户日志的最佳方式。我确定了两个主要解决方案,但无法确定哪个可能是最好的。如果想到其他人,请随时分享;)
1)首先是关于在我拥有的所有集合中存储日志。例如,如果我有 'post'、'friends'、'sports' 和 'music' 集合,那么我可以在每个集合的每个文档中创建一个日志字段,其中包含所有日志信息我要存储的。
2)第二种方法是创建一个完整的'log'集合,每个文档都有一个类型('post', 'friends' ...)来标识我的日志种类'与引用的文档的 ID 一起存储。
我真正需要的是能够尽可能快地存储和检索数据(即除日志之外的所有数据)。 (因此,如果我使用 (1),我将不得不始终从我的选择查询中删除日志,因为它们在大多数情况下都是无用的)
日志只会定期访问(主要用于报告和统计),但需要映射到它们的初始文档(在 (2) 的情况下)。
我将为几乎所有要存储的非日志数据创建日志(因此在每个集合中存储日志可能更快:一个插入 vs 两个)。
日志记录也可以异步完成以减轻服务器上的负载。
考虑到所有这些,我真的无法找到最适合我需要的。有人有任何想法/意见可以分享吗?
非常感谢!
您希望如何访问您的日志将在您的设计决策中发挥重要作用。您将根据什么标准访问您的日志文档?您是否必须按类型(例如 post、朋友)和 ID(文档的对象 ID)进行查询?还有其他一些识别特征吗?这可能是额外的开销,因为您必须先阅读 'type' 集合,获取您想要的 ID,然后查询您的日志集合。这会产生更多的读取开销。
我推荐的是单独的日志收集,因为这样可以将所有相关数据保存在一个地方。然后,对于每个日志文档,在类型集合的文档 ID 和日志集合之间有一个 1:1 映射。例如如果您有朋友文档,请使用朋友文档的 _id 字段作为日志集合中文档的 _id 字段。这样您就可以直接查找您的日志文档而无需第二次阅读。如果每个类型文档都有多个日志记录,请在日志文档中使用一个数组,并使用 mongo 的 $push 将每个日志记录附加到它。就存储、写入($push 不需要读取 - 'set and forget')和查找时间(智能 1:1 映射 - 如果你有 _id,只需要一个查询,这将是一种非常有效的日志架构).
我是 mongoDB 的新手,正在尝试找出存储用户日志的最佳方式。我确定了两个主要解决方案,但无法确定哪个可能是最好的。如果想到其他人,请随时分享;)
1)首先是关于在我拥有的所有集合中存储日志。例如,如果我有 'post'、'friends'、'sports' 和 'music' 集合,那么我可以在每个集合的每个文档中创建一个日志字段,其中包含所有日志信息我要存储的。
2)第二种方法是创建一个完整的'log'集合,每个文档都有一个类型('post', 'friends' ...)来标识我的日志种类'与引用的文档的 ID 一起存储。
我真正需要的是能够尽可能快地存储和检索数据(即除日志之外的所有数据)。 (因此,如果我使用 (1),我将不得不始终从我的选择查询中删除日志,因为它们在大多数情况下都是无用的) 日志只会定期访问(主要用于报告和统计),但需要映射到它们的初始文档(在 (2) 的情况下)。 我将为几乎所有要存储的非日志数据创建日志(因此在每个集合中存储日志可能更快:一个插入 vs 两个)。 日志记录也可以异步完成以减轻服务器上的负载。
考虑到所有这些,我真的无法找到最适合我需要的。有人有任何想法/意见可以分享吗?
非常感谢!
您希望如何访问您的日志将在您的设计决策中发挥重要作用。您将根据什么标准访问您的日志文档?您是否必须按类型(例如 post、朋友)和 ID(文档的对象 ID)进行查询?还有其他一些识别特征吗?这可能是额外的开销,因为您必须先阅读 'type' 集合,获取您想要的 ID,然后查询您的日志集合。这会产生更多的读取开销。
我推荐的是单独的日志收集,因为这样可以将所有相关数据保存在一个地方。然后,对于每个日志文档,在类型集合的文档 ID 和日志集合之间有一个 1:1 映射。例如如果您有朋友文档,请使用朋友文档的 _id 字段作为日志集合中文档的 _id 字段。这样您就可以直接查找您的日志文档而无需第二次阅读。如果每个类型文档都有多个日志记录,请在日志文档中使用一个数组,并使用 mongo 的 $push 将每个日志记录附加到它。就存储、写入($push 不需要读取 - 'set and forget')和查找时间(智能 1:1 映射 - 如果你有 _id,只需要一个查询,这将是一种非常有效的日志架构).