分桶模式

分桶模式

Content #

物联网场景下的海量数据处理场景,飞机监控数据形式如下:

{
    "_id" : "20160101050000:CA2790",
    "icao" : "CA2790",
    "callsign" : "CA2790",
    "ts" : ISODate("2016-01-01T05:00:00.000+0000"),
    "events" : {
        "a" : 31418,
        "b" : 173,
        "p" : [115, -134],
        "s" : 91,
        "v" : 80
    }
}

10万架飞机,每分钟一条,1年的数据量有多少大?用MongoDB来存储数据,应如何处理?

应用MongoDB的分桶模式来存储数据,将1架飞机1小时的数据放入同一个文档中,如:

{
    "_id" : "20160101050000:WG9943",
    "icao" : "WG9943",
    "ts" : ISODate("2016-01-01T05:00:00.000+0000"),
    "events" : [
        {
            "a" : 24293, "b" : 319, "p" : [41, 70], "s" : 56,
            "t" : ISODate("2016-01-01T05:00:00.000+0000“)
        },
        {
            "a" : 33663, "b" : 134, "p" : [-38, -30], "s" : 385,
            "t" : ISODate("2016-01-01T05:00:01.000+0000“)
        },
        ...
    ]
}

下表是每分钟1个文档与每小时1个文档的对比:

From #