mongodb时间序列数据建模

时间:2012-11-28 22:33:57

标签: mongodb cassandra time-series data-modeling nosql

Newbe关于如何查询MongoDB的问题。我希望每天收到多个对象并将它们聚合成一天的记录。文档结构最终将包含365天的数据(每年,每年可能有一个新文档),格式如下:

{
"2012": {
    "9": {
        "1": {
            "attribute1": 42.1,
            "attribute2": 5.895,
            "attribute3": 2347,
            "attribute...n": 33076.875,
            "startFuel": [
                32976.75,
                33018.875,
                33041.375
            ],
            "startOdometer": [
                202748.9,
                202973,
                203100.2
            ],
            "endOdometer" : 209855.6
        },
        "10": {
            "attribute1": 363.90000000000003,
            "attribute2": 59.242000000000004,
            "attribute3": 20284,
            "attribute...n": 34335.375,
            "startFuel": [
                34161,
                34214.125,
                34245.25,
                34280.875
            ],
            "startOdometer": [
                209855.6,
                210166.4,
                210348.2,
                210555.7
            ],
            "endOdometer" : 210655.7
        }
    }
},
"_id": ObjectId("50b6838a6ef6585a9e51f2af"),
"key1": null,
"keu2": -1,
"key3": 572755
}

正如您所看到的,每个文档属于一个实体,一年包含每个月,每个月每天包含一天(只要有当天/月/年的数据)。

我正在努力解决如何查询此文档格式。我想使用聚合框架来平均文档中的值(针对单个实体),并在同一时间段内将它们聚合在多个文档/实体中。

例如,我想找到八月份每天驾驶的平均里程数(对于每个实体,每月的每一天,从末端测量仪中减去最低的startOdometer并平均一个月的值)。 (顺便说一句:startOdometer是一个数组,允许我在不预先查询文档的情况下推送值,看它是否已存在)。

我们内部正在讨论是否需要使用map / reduce将所有聚合视图创建到我们的数据中,或者我们是否可以使用map / reduce创建日摘要并使用聚合框架来提取数据一起。我想知道这种数据结构如何支持这种类型的查询,或者哪种其他数据结构可能更适合我们利用聚合框架来汇总我们的数据。

1 个答案:

答案 0 :(得分:1)

像这样的动态模式很难查询。您可以更好地重新设计架构以使用固定密钥名称并将动态内容保留为值。