Mongo非常规时间序列

时间:2015-02-07 17:47:02

标签: mongodb time-series scalability

我使用MongoDB来处理时间序列,这是正常的,因为到目前为止没有太多的数据,但我现在需要确定扩展到更多数据所需的内容。今天,每天收到+ 200k的数据,每隔几秒收到一次数据,这不是很大,但这应该很快就会增加。

由于每条数据(parentID,timestamp,value)都创建了一个文档,因此使用的数据收集远远没有效率。我已经看到了几种方法,它们使用一个文件来保存整个小时的时间序列(例如,内部数组可以保存每秒的数据),这真的很棒但是因为我必须处理的数据是如果没有定期收到(取决于parentID),这种方法可能不合适。

我收到的数据中包括:
- 有些是每隔几秒钟收到的 - 有些是每隔几分钟收到的 对于所有这些数据,两个连续数据之间的步骤不一定相同。

我是否可以使用更好的方法来处理这些数据,例如使用其他模型化,这有助于扩展数据库?

今天只有一个mongod进程正在运行,我想知道在哪个级别可能真正需要分片,有什么提示吗?

2 个答案:

答案 0 :(得分:2)

即使读数不均匀分布,您仍然可以获得预分配文档的好处。您无法在读数时构建每个文档,但您可以构建每个文档以保存固定数量的读数

{
    "type" : "cookies consumed"
    "0" : { "number" : 1, "timestamp" : ISODate("2015-02-09T19:00:20.309Z") },
    "1" : { "number" : 4, "timestamp" : ISODate("2015-02-09T19:03:25.874Z") },
    ...
    "1000" : { "number" : 0, "timestamp" : ISODate("2015-01-01T00:00:00Z") }
}

根据您的使用案例,此结构可能适合您,并为您提供使用新读数更新预分配文档的好处,仅为每个NN读数分配一个全新的文档。

答案 1 :(得分:1)

这里很好地解决了你的问题的解决方案:

http://bluxte.net/musings/2015/01/21/efficient-storage-non-periodic-time-series-mongodb

已经指出的基本思想是:每个文档捕获固定数量的事件,并在另一个文档中保存每个文档的开始和结束时间戳的跟踪记录"更高级别"采集。