我需要创建一个时间序列数据库,并执行以下任务:
- 创建新的时间序列
- 更新现有时间序列
- 一次查询一个或多个时间序列(例如同一日期的所有时间序列等...)
Mongo 是否适应了这一点,如果是,我应该如何构建数据库?(一个时间序列=一个文档?或者一个文档=一个时间序列条目,所有这些文档形成一个集合,即整个时间序列?)
我在这里有点迷茫,我发现很难找到任何信息,因为通常 Mongo 非常灵活,因此用户可以在基础架构中进行选择。
任何专门解释如何在 Mongo 中管理时间序列的教程链接都非常受欢迎。
谢谢!
我建议每个文档有一个时间序列条目。每个文档存储多个条目存在一些问题:
另请注意,默认 MongoDB ObjectId 内置了时间戳。如果时间序列精度小于一秒,您可以使用它。
这是来自使用 MongoDB 的事件日志库的示例 BSON 文档:
由于事件日志类似于时间序列,因此可能值得研究其余代码。有 Java、C#、PHP 和 Python 版本。
这是另一个类似的开源项目:Zarkov
[更新]作为对@RockScience 评论的回应,我添加了更多参考资料:
我在 SO(https://stackoverflow.com/questions/4814167/storing-time-series-data-relational-or-non)上发现了这个问题,其中 OP 询问如何存储时间序列。尽管他的问题更多地基于使用 NoSQL 数据库或 RDBMS,但您似乎很愿意使用 NoSQL 数据库。
还发现这篇关于“时间序列数据的独特数据库要求”的文章可能有用。
希望这可以帮助。
是的,NoSQL 数据库比传统的 RDBMS 更适合存储时间序列数据。
是的,MongoDB 非常适合这个用例。
- 你应该如何构建数据库?一份文档 = 一个时间序列输入 VS 多个时间序列。
答案是在一个文档中存储多个时间序列。拥有更少的文档将有助于减少读取的性能。一个技巧是使用预定义的值准备文档。这将通过避免Record Padding来优化更新文档。
下面是一个关于如何以分钟间隔以最佳方式存储一个小时的时间序列的模式示例:
您使用 0 值启动它,然后将优化更新。读取得到了优化,因为读取了一个文档而不是 60 个。如果您需要存储一天的数据,或者一个月,您继续使用相同的技术,您就会明白这一点。
这是一个教程的链接,该教程专门解释了如何在 MongoDb 官方博客中管理时间序列:http: //blog.mongodb.org/post/65517193370/schema-design-for-time-series-data-in- mongodb