我负责编写一个应用程序来处理大量的客户和商业智能信息。此信息涉及各种业务和指标(如收入、其网络平台等)的记录。出于报告目的,已决定现在必须对数据加盖时间戳,以便我们可以构建诸如“Foo Inc. 的收入增加”之类的报告当他们在 2010 年转向数字电视时,增长了 200%。”
或者类似的东西。我们真的不对付那些客户是远远落后于时代。
就目前而言,数据存储在 MongoDB 中,其模式(或缺乏模式)准确地表示了它的显示方式。一个文档有一个名称,可能是用于地址信息或与操作相关的统计信息等的嵌入式文档。我不知何故需要添加时间戳或版本控制的概念。最明显的建模方法是这样的:
key: [{ value: "bar", time: "2012" }, { value: "baz", time: "2011" }]
Run Code Online (Sandbox Code Playgroud)
每个属性都有时间戳。显然,这打破了模式,并增加了维护问题。我还尝试过使用约定(命名属性键,如“Foo (2012-09-31)”,并保留带有时间戳的整个集合的副本。
显然,这是一个非常重要的实现功能,我想知道实现它的最佳方法是什么。在 MongoDB 中为数据添加时间戳的最有效和性能友好的方法是什么?
编辑:是的,我正在考虑版本控制,尽管新数据集很可能会成批出现,而不是经常出现(例如,每个季度)。这就是我考虑为每个集合使用单独的集合并为每个集合添加时间戳的原因,因为数据很多而且相距甚远,但我很想知道是否有更好、更易于维护的方法。
假设您在 _id 列中使用ObjectID,那么您将已经拥有一个基于插入的时间戳。如果您愿意,您甚至可以直接从 shell 中提取它。当然,您可能希望保持原样以永久存储您的原始插入时间戳,但添加另一个则相对简单。由于大多数驱动程序都能够生成自己的 ObjectID,并且您拥有已发布的规范,因此您只需稍加研究即可轻松插入自己的 ObjectID,并使用您选择的语言。
由于 ObjecID 是默认的 _id 值,因此它们也是索引的不错选择,在驱动程序中得到很好的支持等。
或者,在 MongoDB 中实现纯时间戳方面,还有一个BSON Timestamp数据类型。
将这个(或前面提到的 ObjectID)跨文档/值存储在标准字段(例如“ts”)中会增加你提到的字段/文档的开销,但你应该能够轻松地对其进行标准化(field.ts 会总是有一个时间戳值),并用时间戳预测每个字段的开销(时间戳为 8 个字节,或 ObjectID 为 12 个字节 - 有关更多信息,请参见bsonspec.org)。
鉴于您有两种提供时间戳功能的本机已知数据类型,我建议将它们作为这里的一种前进方式。
在将它们添加到现有数据方面,您可以选择在下次接触数据或发布批量更新时“延迟”添加它们,具体取决于您的需要 - 灵活模式的好处。
归档时间: |
|
查看次数: |
25464 次 |
最近记录: |